将NSString从一个ViewController传递给其他的VC NSMutableArray

时间:2012-07-26 19:57:52

标签: iphone objective-c ios xcode nsmutablearray

我是一名iOS开发人员,我想了解NSMutableArray。 具体来说,我想将NSString值从一个VC传递给NSMutableArray,属于另一个视图控制器。我还希望NSMutableArray在其视图中填充UITableView。任何想法如何做到这一点? 例如,我有一个用户在第一个视图中触发的操作

- (IBAction)addToFav:(id)sender {  
}

我想在第二个视图中将NSString myBookString的值传递给NSMutableArray数组。 任务相当简单,但我不太明白为什么你不能在Apple的参考文档中提到的- (void)insertObject:(id)anObject atIndex:(NSUInteger)index方法之外将值传递给NSMutableArray。 提前谢谢!

编辑:我的观点是属于UITabBar和UINavigationController的不同VC同时

2 个答案:

答案 0 :(得分:3)

您需要两个控制器之间的通信。有几种解决方案。选择以下之一。我推荐代表。

来自http://www.hollance.com/

如果您有两个对象A和B,比如两个视图控制器,您希望彼此交谈,您可以选择以下选项:

NSNotificationCenter。

  • 这是匿名的一对多通讯。对象A向NSNotificationCenter发布通知,然后NSNotificationCenter将其分发给侦听该通知的任何其他对象,包括对象B.A和B不必彼此了解任何内容,因此这是一个非常松散的耦合。也许有点太松了......

KVO(键值观察)。

  • 一个对象观察另一个对象的属性。这是非常紧张的 耦合,因为对象B现在直接窥视对象A. KVO的优点是对象A不必知道这一点 所有,因此不需要发送任何通知 - KVO机制在幕后处理这个问题。

直接指针。

  • 对象A具有指向对象B的指针并直接向其发送消息 当感兴趣的事情发生时。这是最紧密的耦合 可能因为A和B无法相互运作。在里面 视图控制器的情况,你通常要避免这种情况。

代表

  • 对象B是对象A的委托。在这种情况下,对象A可以 对Object B一无所知。它只知道一些对象 执行其委托的角色,它将很乐意发送消息 对那个代表,但它不知道 - 或关心 - 这是对象 B.委托模式通常是首选的沟通方式 视图控制器之间,但需要一些工作来设置。

块。

  • 基本上与代理方法相同,但现在除了对象B. 给对象一个或多个块(闭包)时要执行 某些事件发生。没有正式的代表协议和 Object A看到Object B的唯一东西就是它的块 给出。

答案 1 :(得分:1)

NSMutableArray就是一个标准的可变数组实现。它具有您期望从任何其他语言/框架中获得的所有功能。 docs

向数组添加元素的方式有什么问题?如果您不介意将其添加到尾部,也可以[array addObject:object]

要回答您的其余问题,有很多方法可以将数据从一个控制器传输到另一个控制器。你的导航设置如何?您使用的是UITabBarController还是UINavigationController?这些观点如何相互关联?如果它们是嵌套的,则可以直接将数据从一个传递到另一个。如果没有,您可以使用类似您的app delegate之类的东西来保存数据并传递它。