2010-10-02 86 views
0

後陣列爲空每當我調用另一個類中的方法-(void)setArrayCheckOut:(int)num時,數組arrayCheckout爲空。在-(void)setArrayCheckOut:(int)num之後調用-(IBAction)reloadTable:(id)sender「導致重載表 - (null),0」。調用方法

任何想法出了什麼問題?

這麼久

@implementation CheckOut 
-(id)init 
{ 
[super init]; 
tableCheckOut = [[NSTableView alloc]init]; 
if (!arrayCheckOut) 
{ 
arrayCheckOut = [[NSMutableArray alloc]init]; 
[arrayCheckOut addObject:@"-"]; 
} 

return self; 
    } 
-(void)setArrayCheckOut:(int)num 
{ 

    switch (num) { 
case 170: 
[arrayCheckOut addObject:@"T20, T20, DB"]; 
break; 
default: 
[arrayCheckOut addObject:@"-"]; 
break; 
    } 
NSLog(@"array = %@",[arrayCheckOut objectAtIndex:0]); 

[tableCheckOut reloadData]; 

} 


-(IBAction)reloadTable:(id)sender 
{ 
NSLog(@"reload table - %@, %d",[arrayCheckOut objectAtIndex:0],[arrayCheckOut count]); 

[tableCheckOut reloadData]; 
} 


- (int)numberOfRowsInTableView:(NSTableView *)tv 
{ 
return [arrayCheckOut count]; 
} 

- (id)tableView:(NSTableView *)tv 
objectValueForTableColumn:(NSTableColumn *)tColumn 
row:(int)row 
{ 
NSString *v = [arrayCheckOut objectAtIndex:row]; 
return v; 
} 
@end 
+0

arrayCheckOut在哪裏定義?顯示代碼。 – 2010-10-02 23:23:48

+0

沒有,因爲我不需要它。該數組將只能被應用程序讀取並完全刪除,然後再填充它。 – lueda 2010-10-02 23:29:44

+0

'setArrayCheckOut:'的問題包括一個幻數(170),魔術和非本地化的字符串文字,使用'int',其中'NSInteger'或'NSUInteger'可能更合適(在您的數據源方法中也是一個問題) ,以及該方法的非描述性名稱。我建議爲數字和字符串定義常量,使用'NSLocalizedString'定位字符串(因爲它們似乎用於顯示給用戶),切換到'NSInteger'或'NSUInteger',並將'setArrayCheckOut:'重命名爲更清楚地說明了方法的目標,而不僅僅是它的實現。 – 2010-10-02 23:48:58

回答

1

如果數組是空的,objectAtIndex:0會拋出異常。

既然它沒有,但是返回nil,您沒有數組:您已將objectAtIndex:消息發送到nil

最有可能的是,CheckOut不是那種其實例初始化爲init的類。檢查其超類的文檔以查看其指定的初始化程序是什麼,然後改寫它。

+0

我是新手編程...我應該使用什麼樣的auf初始化器?超類是NSObject,所以我期望只有一個初始化器(init)。 – lueda 2010-10-03 08:30:11

+0

您應該實現將調用的任何初始化器。 NSObject提供的唯一初始化函數是'init',所以這可能是你需要在你的子類中實現的初始化函數。因爲你已經實現了它來創建數組,所以這會讓我們回到爲什麼你沒有數組的問題。你是否遺漏了一些將'arrayCheckOut'變量設置回'nil'的代碼? – 2010-10-03 08:47:04

+0

對我的項目的內容進行了精簡。 arrayCheckOut僅在CheckOut.h/m中定義。所以這是我的整個項目,包括所有的源文件:http://stubbi.org/Darx.zip。你可以看到'arrayCheckOut'被正確設置,但是表格沒有用新值刷新。 'arrayCheckOut'再次得到它的默認值。也許你發現錯誤 – lueda 2010-10-03 09:48:41