【问题标题】:push and pop information from DetailViewController to MasterViewController从 DetailViewController 推送和弹出信息到 MasterViewController
【发布时间】:2013-10-28 09:36:50
【问题描述】:

我正在使用 SplitViewController 制作一个小型 iPad APP,我主要在 DetailViewController 上使用 MasterViewController。我正在尝试将一些数据从 DetailViewController 推送到 MasterViewController。将信息推送到 MasterViewController 后,我想使用它,因此我使用 pop 方法来执行此操作。

push 方法填充数组 - 但由于某种原因,每次我调用 pushModuleTitle 方法时都会重新创建我的数组,并且它一次只保存一个对象。

DetailViewController.m

- (IBAction)buttonAddPressed:(id)sender
{
    cw3MasterViewController *master = [[cw3MasterViewController alloc]init];
    [moduleTitles addObject:textFieldModuleTitle.text];
    [master pushModuleTitle:self.textFieldModuleTitle.text];);
}

MasterViewController.m

 - (NSMutableArray *)moduleTitleStack//init array
    {
        if (!_moduleTitleStack){
            _moduleTitleStack = [[NSMutableArray alloc] init];
        }
        return _moduleTitleStack;
    }

    -(void)pushModuleTitle:(NSString*)moduleTitile
    {
        NSString * moduleTitileObject = moduleTitile;
        [self.moduleTitleStack addObject:moduleTitileObject];
        NSLog(@"%@",self.moduleTitleStack);

    }

所以要使用推送的信息,我正在使用这个 pop 方法: - 但这总是返回一个空值,当我放置一个断点时,它表明我的 moduleTitleStack 有 0 个对象。我不知道为什么。

-(NSString *)popModuleTitle
{
    NSString * moduleTitileObject = [self.moduleTitleStack lastObject];
    if (moduleTitileObject)[self.moduleTitleStack removeLastObject];
    return moduleTitileObject;
}

调用popModuleTitle方法:给出一个空值

- (IBAction)testButtonPressed:(id)sender {

    NSLog(@"%@", [self popModuleTitle]);

}

【问题讨论】:

    标签: objective-c xcode uisplitviewcontroller ipad


    【解决方案1】:

    原因与您刚才提出的另一个问题的答案相同。每次单击按钮时,您都会创建一个新的 cw3MasterViewController 实例。您应该像这样获得对主控制器的引用:

    cw3MasterViewController *master = self.splitViewController.viewControllers[0];
    

    这假定 master 是拆分视图控制器索引 0 处的唯一控制器。如果它嵌入在导航控制器中(通常是这样),那么您需要更进一步才能掌握:

    cw3MasterViewController *master = (cw3MasterViewController *)[(UINavigationController *) self.splitViewController.viewControllers[0] topViewController];
    

    【讨论】:

    • 我在哪里设置这条线 P.S 我对此很陌生
    • @user2382834,如果您想在多个地方使用此引用,那么我将为 master 创建一个属性,并将该行放在详细视图控制器的 viewDidLoad 方法中。顺便说一句,这只有在主控制器没有嵌入导航控制器时才能正常工作。是你的?如果是这样,我会更新我的答案。
    • 不确定,但我首先创建了一个主从应用程序,所以一切都是由 xcode 为我设置的
    【解决方案2】:

    这里:

    w3MasterViewController *master = (cw3MasterViewController *)[(UINavigationController *) self.splitViewController.viewControllers[0] topViewController];

    你有一个语义问题:下标需要接口“NSArray”的大小,这在非脆弱 ABI 中不是恒定的

    改用委托!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2012-11-06
      相关资源
      最近更新 更多