2009-11-20 54 views
0

我有一個(希望愚蠢的)iPhone編程問題。我試圖從我創建的對象中獲取一個字符串,並將其存儲在AppDelegates NSMutableArray中 - 是否有一個原因,當我嘗試訪問(通過appdelegates數組或其控制器副本)時,我總是遇到EXC_BAD_ACCESS錯誤,我的NSMutableArray在cellForRowAtIndexPath方法中,但沒有任何問題在我的ViewDidLoad方法中?任何想法讚賞!函數在viewDidLoad中工作,但不是CellForRowAtIndexPath - 爲什麼?

在我的 「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」 方法,我得到以下錯誤:

Program received signal: 「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社會成本跟蹤器[688: 207] 2nd Val:UCBrewers 2009-11-19 18:42:57.885社會成本跟蹤器[688:207]問題點 - 我的公司 - 大小:5 編程接收信號:「EXC_BAD_ACCESS」。

回答

0

當您第一次設置它時,您並未保留myCompanies對象,因此它在cellForRowAtIndexPath中不可用。你需要無論是在你的頭聲明myCompanies數組作爲這樣的特性:

@property (retain) NSArray* myCompanies; 

,然後用

@synthesize myCompanies; 

@sythesize它在.m或者,需要顯式調用保留您的像這樣的代碼:

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

在這種情況下,你還需要調用釋放當你與陣列,最有可能在視圖控制器的dealloc的實現。

+0

謝謝馬特, 我有我的財產設置如下,並且我也合成myCompanies。 @property(nonatomic,retain)NSMutableArray * myCompanies; 我試着用「保留」來看看它是否以某種方式工作了魔法,但到目前爲止還沒有運氣:(我也試着用保留在.m文件中的方式來描述,但仍然得到這個補充exc_bad_access消息。想法?? – 2009-11-20 05:12:23

+0

哪一行在cellForRowAtIndexPath中失敗?當你使用NSLog(@「Contents:%@」,myCompanies)打印整個數組內容時,你會得到什麼;在cellForRowAtIndexPath中? – 2009-11-20 16:24:57

0

setArray方法在做什麼?你確定你的viewDidLoad在cellForRowAtIndexPath之前被調用嗎?您可以嘗試在applicationDidFinishLaunching的appDelegate類中調用setArray。或在你的類的初始化方法

相關問題