我有一个(希望很傻)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”。
答案 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方法