保存数组

时间:2010-08-18 20:26:14

标签: objective-c cocoa arrays

如何在多个位置保存数组,即。不同的视图控制器,以便保存数组中的数据,并允许它后来由表使用? 编辑

目标c我有一个带代码的ibaction

[[NSMutableArray alloc] init];
[favoritesArray addObject: @"one"]; 
//and in the fav table view this code//
favoritesArray = [[NSMutableArray alloc]init];
didContain = [[NSMutableArray alloc]init];
if ([favoritesArray contains:@"one"]);

{ [didContain addObject:@"trial"]; }

然而它在if部分崩溃......

2 个答案:

答案 0 :(得分:1)

Alx,您是否尝试从多个对象访问favouritesArray中的数据?这是我认为你想要做的,但没有更多的背景,很难提出解决方案。这是一种可能的方法:

favouritesArray声明为控制器类中的属性。 (您可以使用@property@synthesize来实现此目标。)

然后,在您的视图中,将控制器添加为IBOutlet(称为myController)。然后在视图和控制器之间的Interface Builder中建立连接。然后,您可以通过编写以下内容从视图类访问该数组:

例如,

[[myController favouritesArray] objectAtIndex:3]

通常,在程序中的不同对象之间“复制”数据是个坏主意。除非有很好的理由这样做,否则请使用引用。尝试考虑该数组的“所有者”是什么对象,并将其放在该类中。

答案 1 :(得分:1)

[[NSMutableArray alloc] init];
[favoritesArray addObject: @"one"]; 

我假设您在原始代码中确实拥有“favoritesArray =”,并且在复制时错过了它。否则,您将阵列放在地板上,favoritesArray仍然保留nil

if ([favoritesArray contains:@"one"]);

{ [didContain addObject:@"trial"]; }
     

然而它在if部分崩溃......

if声明存在两个问题:

  1. NSArray不响应contains:,这是崩溃告诉你的。您需要向阵列发送它确实响应的消息,例如文档中列出的containsObject:
  2. 正如我通过我应用于您的代码的格式所表明的那样,if语句与其后面的{ [didContain addObject:@"trial"]; }语句无关。

    那是因为你在if条件之后加了一个分号。 if语句在条件和语句之间不带分号;声明必须直接遵循条件(即紧接在)之后)。而且,分号本身就是一个有效的空语句。

    所以,你有一个空的语句,只有if(如果收藏夹数组包含@"one",什么也不做),你有你想要由{{1}控制的语句站在自己的,无条件的。

    if之后剪切分号,以便if{ … }绑定,而不是单独的声明。