函数在viewDidLoad中工作但不在CellForRowAtIndexPath中 - 为什么?

时间:2009-11-20 02:51:31

标签: iphone

我有一个(希望很傻)iPhone编程问题。我试图从我创建的对象中获取一个字符串,存储在AppDelegates NSMutableArray中 - 当我尝试访问时(通过appdelegates数组或我的控制器副本),我总是得到一个EXC_BAD_ACCESS错误的原因我的NSMutableArray在cellForRowAtIndexPath方法中,但在我的ViewDidLoad方法中没有任何问题?任何想法都赞赏!

在我的“viewDidLoad”方法中,我有以下代码:

    appDelegate = (Social_Cost_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate setArray];
    myCompanies = appDelegate.companies;
    NSLog(@"Important Value: %i",[myCompanies count]);
    Company *c = [myCompanies objectAtIndex:0];
    NSString *me = [c cname];
    NSLog(@"2nd Val: %@", me); 

在我的“cellForRowAtIndexPath”中,我有以下代码:

    NSLog(@"Problem Spot--myCompanies-Size: %i",[myCompanies count]);
    Company *c = [myCompanies objectAtIndex:0];
    NSString *me = [c cname];
    NSLog(@"2nd Val: %@", me);

然而,在“cellForRowAtIndexPath”方法中,我收到以下错误:

  

编程接收信号:“EXC_BAD_ACCESS”。

我做错了什么,为什么我可以从数组中获取大小,而不是对象?我在这里有点难过......感谢您的任何想法! (P.S.我不是iPhone / Objective-C开发人员 - 只是在这里学习一些侧面项目)。

以下是我的调试器输出: 2009-11-19 18:42:57.883社会成本追踪[688:207]重要价值:5 2009-11-19 18:42:57.883 Social Cost Tracker [688:207]第二名:UCBrewers 2009-11-19 18:42:57.885社会成本追踪[688:207]问题点 - myCompanies-Size:5 程序接收信号:“EXC_BAD_ACCESS”。

2 个答案:

答案 0 :(得分:0)

首次设置时,您不会保留myCompanies对象,因此无法在您的cellForRowAtIndexPath中使用它。你需要在标题中声明myCompanies数组作为这样的属性:

@property (retain) NSArray* myCompanies;

然后使用

在.m中将其合成
@synthesize myCompanies;

或者您需要在代码中明确调用retain,如下所示:

appDelegate = (Social_Cost_TrackerAppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate setArray];
myCompanies = [[appDelegate companies] retain];
// ... etc.

在这种情况下,你需要在完成数组时调用release,很可能是在视图控制器的dealloc中。

答案 1 :(得分:0)

setArray方法在做什么?你确定在cellForRowAtIndexPath之前调用了viewDidLoad吗?您可以尝试在applicationDidFinishLaunching中的appDelegate类中调用setArray。或者在你的班级的init方法