Iphone 在ViewController之间传递数据(再次)

Iphone 在ViewController之间传递数据(再次),iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我很抱歉,伙计们,我知道以前有人问过这个问题。但是经过4个小时的搜索,我找不到一个好的解释 所以我想做的是:我有一个tableView,用户可以在其中选择一些东西(通过使用AccessoryCheckmark)。当触摸UINavigationBar中的“后退”按钮(视图将消失)时,我想将所选行(我有一个名为“selectedRowArray”的数组,它正确地给出了所选值)发送回它以前的NavigationController。 我读过关于AppDelegates、@propertys、deleg

我很抱歉,伙计们,我知道以前有人问过这个问题。但是经过4个小时的搜索,我找不到一个好的解释

所以我想做的是:我有一个tableView,用户可以在其中选择一些东西(通过使用AccessoryCheckmark)。当触摸UINavigationBar中的“后退”按钮(视图将消失)时,我想将所选行(我有一个名为“selectedRowArray”的数组,它正确地给出了所选值)发送回它以前的NavigationController。 我读过关于AppDelegates、@propertys、delegates和(正确地说是“最糟糕的”方式:)NSUserDefaults的文章


请告诉我,将我的数据从tableView2传递回tableView1的最佳(最智能)方法是什么?

要将数据发送到视图控制器堆栈(导航堆栈)中的上一个视图,可以使用以下代码段:

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更改为previous views类名,并确保在该previous view controller头文件中创建该属性,如下所示:

@property(strong)NSArray *arrayProperty;

布雷登的方式确实很好,但我更喜欢做一个单身汉,它很好而且容易处理。使单例存储您的属性。您还可以始终检查属性是否为nil。

使上一个视图控制器成为所选视图控制器的委托

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

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


协议是可选的。

我也遇到过类似的情况,而且我是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开发的新手。因此,我不确定这是正确的方法还是有任何缺点。

您需要更具体地说明您不了解的内容。正如你所说,已经有很多关于这方面的信息,包括SO本身。你到底有什么问题?你做了什么?你被困在哪里?您正在寻找的哪些信息尚未包含在这些其他来源中?除非数据需要作为应用程序整个模型层的一部分普遍集中提供,否则这是对单一模式IMO的不当使用。应用于抽象或多或少的单一资源,例如db访问,网络访问等。将简单的值传递给父视图控制器不是一个很好的用途。我同意@Carl Veazey。当您需要全局共享数据时,单例是合适的。在我看来,委派是处理这种情况的正确方法。这将
NextViewController
PrevViewController
紧密结合。为了避免这种情况,最好使用协议。编辑:为了响应您的编辑-缺点是,如果没有
PrevViewController
,您将永远无法使用
NextViewController