(我无法在网上找到这个)
所有代码都在一个对象中。在.h文件中,我定义了一个NSMutableArray。我分配它 在初学者。
-(id)init{
self = [super init];
if(self) {
definitionArray=[[NSMutableArray alloc] init];
[self initialLoadDefinitionData];
if([definitionArray isKindOfClass:[NSMutableArray class]]) {
NSLog(@"Array is Mutable");
} else {
NSLog(@"Array is Not Mutable");
}
}
return self;
}
我想基于NSUserDefaults值初始化,所以我从中调用另一个函数 在里面。这称为initialLoadDefinitionData:theCollection是非常基本的。
-(void)loadDefinitionData{
definitionArray=[[[NSUserDefaults standardUserDefaults] objectForKey:@"SOMEKEY"] mutableCopy];
}
我在init函数中添加了isKindOfClass,仅用于调试目的。有趣的部分 这是因为当从数据中获取数据时,这个IF语句返回MUTABLE NSUserDefaults的。但是如果@“SOMEKEY”不可用,则objectForKey返回一个 nil和definitionArray突然是IMMUTABLE。即使指定了mutableCopy。
所以我的结论是,如果objectForKey找不到对象,则返回值为 不可以。这个结论是否正确? 或者,MutableCopy不能将对象称为可变对象,它是否为Nil?
答案 0 :(得分:3)
没有你的结论是对的。如果objectForKey
返回nil
,那么您就会向mutableCopy
发送nil
消息,当然会返回nil
(每封邮件都会发送到nil
在ObjC中返回nil
),这就是你看到else
部分的原因。 (Array is Not Mutable
消息具有误导性,因为此时您甚至没有NSArray
实例。)