1

首先,我已经尝试在网上搜索解决方案,但没有一个对我有用,我在想,因为我正在使用 ECSlidingViewController 在应用程序中导航,因此我无法使用该prepareForSegue方法,我的问题可能需要不同的方法.

  1. 我有一个名为的类viewInits,它在.h文件中保存我希望其他类设置和获取它的值的属性。在这种情况下,该属性是一个 NSString *navBarTitle

  2. ClassA中,我有一个tableView:didSelectRowAtIndexPath:方法,我

    1. 创建一个 ViewInits 类对象 - *viewInits
    2. 然后我将 设置setNavBarTitle:为 的值[self.MenuRowsArray objectAtIndex:indexPath.row]
    3. 在下一行,我做了一个 NSLog 来检查,是的,viewInits.navBarTitle现在拥有我想要的值。
  3. 在中,类似地,我创建了一个对象 -并对. 但它返回。这里似乎有什么问题?ClassB's viewDidloadMethodViewInits*viewInitsviewInits.navBarTitle(null)


这是我如何尝试传递 NSString 的代码。我究竟做错了什么?

viewInit .h

@interface ViewInits : NSObject
@property (strong, nonatomic) NSString *navBarTitle;
@end

ClassA.mtableView:didSelectRowAtIndexPath: 方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *identifier = [self.MenuRowsArray objectAtIndex:indexPath.row];
    UIViewController *newTopViewController = [self.storyboard instantiateViewControllerWithIdentifier:identifier];

    // *---------- Assign identifier to NSString viewInits ----------*
    ViewInits *viewInits = [[ViewInits alloc] init];
    [viewInits setNavBarTitle:identifier];
    NSLog(@"%@", viewInits.navBarTitle);
    // *---------- Assign identifier to NSString viewInits ----------*

    [self.slidingViewController anchorTopViewOffScreenTo:ECRight animations:nil onComplete:^
    {
        CGRect frame = self.slidingViewController.topViewController.view.frame;
        self.slidingViewController.topViewController = newTopViewController;
        self.slidingViewController.topViewController.view.frame = frame;
        [self.slidingViewController resetTopView];
    }];
}

ClassB.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    // *========== ECSlidingViewController ==========*
    self.view.layer.shadowOpacity = 0.75f;
    self.view.layer.shadowRadius = 10.0f;
    self.view.layer.shadowColor = [UIColor blackColor].CGColor;
    if (![self.slidingViewController.underLeftViewController isKindOfClass:[MenuViewController class]])
    {
        self.slidingViewController.underLeftViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Menu"];
    }
    [self.view addGestureRecognizer:self.slidingViewController.panGesture];
    // *========== ECSlidingViewController ==========*


    ViewInits *viewInits = [[ViewInits alloc] init]; // Create ViewInit class object
    self.navBar.topItem.title = viewInits.navBarTitle;
    NSLog(@"%@", viewInits.navBarTitle); // <<--- This always ends up null. What's wrong?
}

非常感谢您的帮助。谢谢你。

4

1 回答 1

1

如果您想ViewInit用作设置的公共存储,它应该是一个单例,以便应用程序中的所有其他实例都可以获取它。目前,您每次要使用它时都会创建一个新实例,因此新实例没有您以前的任何设置。

另外,我知道滑动视图控制器是什么,我问它是因为你可能不正确地使用它。如果您有一个视图控制器,它是当前的顶视图控制器,并且它更改了顶视图控制器(A 类可能正在这样做,不确定),那么引用self.slidingViewController将在您的代码中停止工作。

于 2013-07-29T06:36:11.987 回答