2010-10-02 50 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