如何在多个位置保存数组,即。不同的视图控制器,以便保存数组中的数据,并允许它后来由表使用? 编辑
目标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部分崩溃......
答案 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
声明存在两个问题:
contains:
,这是崩溃告诉你的。您需要向阵列发送它确实响应的消息,例如文档中列出的containsObject:
。正如我通过我应用于您的代码的格式所表明的那样,if
语句与其后面的{ [didContain addObject:@"trial"]; }
语句无关。
那是因为你在if
条件之后加了一个分号。 if
语句在条件和语句之间不带分号;声明必须直接遵循条件(即紧接在)
之后)。而且,分号本身就是一个有效的空语句。
所以,你有一个空的语句,只有if
(如果收藏夹数组包含@"one"
,什么也不做),你有你想要由{{1}控制的语句站在自己的,无条件的。
在if
之后剪切分号,以便if
与{ … }
绑定,而不是单独的声明。