2012-09-04 52 views
-1

我很抱歉家伙,我知道这个问题之前已被问过。但经过4小时的搜索,我找不到一个很好的解释。ViewControllers之间传递数据(再次)

所以我想要做什么:我有一个tableView,用户可以在其中选择一些东西(通过使用AccessoryCheckmark)。当触摸UINavigationBar中的“后退”按钮(viewWillDisappear)时,我想将选定的行(我有一个名为“selectedRowArray”的数组,它可以正确地给我选定的值)发送回它以前的NavigationController。 我读了关于AppDelegates,@propertys,委托和(正确的“最差”的方式:) NSUserDefaults。

请问,有人可以告诉我,哪个是最好的(最聪明的)方式,将我的数据从tableView2返回到tableView1?

+2

您需要更具体地了解您不了解的内容。正如你所说,这里已经有很多信息,包括SO本身。你有什么特别的问题?你做了什么,你卡在哪里?您在寻找哪些信息尚未包含在其他来源中? –

回答

0

对于您的视图控制器栈将数据发送到一个视图(导航堆栈),那么你可以使用下面的代码片段:

int previous = self.navigationController.viewControllers.count - 2; 
UIViewController *controller = [self.navigationController.viewControllers objectAtIndex:previous]; 
controller.arrayProperty = @[]; //array element to pass into whatever specified property 
[self.navigationController popViewControllerAnimated:YES]; 

当然是一定要的UIViewController改变以前的看法类的名称,并确保该物业在先前视图控制器头文件创建像这样:

@property(strong)NSArray *arrayProperty; 
-1

Braydens方式确实不错,但我更愿意做一个单身,这是很好的,易于操作。让单身人士存储你的属性。您也可以随时检查财产是否为零。

+1

除非数据需要作为应用程序的整个模型层的一部分一般地集中提供,否则这是对Singleton模式IMO的不恰当使用。应该用于抽象或多或少的单数资源,例如数据库访问,网络访问等。将简单的值传递给父视图控制器对此并不合适。 –

+0

我同意@Carl Veazey。当你需要全局共享数据时,单身是合适的。在我看来,代表是处理这种情况的正确方法。 – strings42

1

使以前的视图控制器成为选择视图控制器的代表。

从选择视图控制器调用前一个视图控制器上的委托方法来告诉它选择了什么。

基本上,他们的关键是使用一个委托。让代表被设置为选择控制器的弱属性(这意味着您的目标iOS 5或更高版本,您应该是)。

协议是可选的。

0

我有类似的情况,我是ios开发新手,所以我想让你把我的答案作为一个主角。即使在我遇到一件简单的事情之前,我也需要搜索很多小时。

我在@protocol和代表们遇到了困难时期。

我发现了一个教程(我目前无法找到),它通常做的是在你的nextViewController定义属性和prevViewController

并将其值设置
//nextViewController.h 

@interface nextViewController 
@property (nonatomic, strong) NSString *searchString; 
@end 

// prevController.h 

import "NextViewController.h" 
@property (weak, nonatomic) PrevViewController *prevViewController; 

// prevController.m 
-someMethodFromWhereYouWantToSetTheProperty { 
    prevViewController.searchString = self.yourvalue; 
} 

编辑:

我已经指出我是ios开发者的新手。所以,我不太确定这是正确的方式还是有缺点。

+1

这将'NextViewController'紧密地耦合到'PrevViewController'。为了避免这种情况,最好使用协议。编辑:回应你的编辑 - 缺点是现在你永远不能使用'PrevViewController'没有'PrevViewController'。 –

相关问题