hkl*_*lel 1 objective-c nsmutablearray nsarray ios
StackOverflow上已经存在一些类似的问题.我确实检查了它们,并且在大多数情况下它返回nil,因为它NSMutableArray
尚未初始化.但在我的情况下,我做了初始化.
这是我的代码的一部分:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.storedTimeZones = [[NSMutableArray alloc] init];
NSData *storedData = [[NSUserDefaults standardUserDefaults] dataForKey:@"timeZones"];
if (storedData != nil ) {
self.storedTimeZones = [NSKeyedUnarchiver unarchiveObjectWithData:storedData];
}
NSString *str = [self.smallRegionArray[indexPath.row] stringByReplacingOccurrencesOfString:@"_" withString:@" "];
[self.storedTimeZones addObject: str];
NSLog(str); //the string was printed successfully.
NSLog(@"%lu", (unsigned long)self.storedTimeZones.count); //'0' was printed
}
Run Code Online (Sandbox Code Playgroud)
更新
@Caleb是对的,[NSKeyedUnarchiver unarchiveObjectWithData:storedData
返回零.我解决了这个问题:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.storedTimeZones = [[NSMutableArray alloc] init];
NSData *storedData = [[NSUserDefaults standardUserDefaults] dataForKey:@"timeZones"];
NSMutableArray *ary = [NSKeyedUnarchiver unarchiveObjectWithData:storedData];
if (ary != nil ) {
self.storedTimeZones = ary;
}
NSString *str = [self.smallRegionArray[indexPath.row] stringByReplacingOccurrencesOfString:@"_" withString:@" "];
[self.storedTimeZones addObject: str];
NSLog(str);
NSLog(@"%lu", (unsigned long)self.storedTimeZones.count); //Now it prints `1`
}
Run Code Online (Sandbox Code Playgroud)
但在我的情况下,我做了初始化.
你做了,但后来你取而代之.这是初始化行:
self.storedTimeZones = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)
但是你分配了一个不同的值:
self.storedTimeZones = [NSKeyedUnarchiver unarchiveObjectWithData:storedData];
Run Code Online (Sandbox Code Playgroud)
此时,self.storedTimeZones
可以是不可变的实例,也可以是NSArray
完全不同的对象,或者nil
.我猜它是后者,因为你打电话时没有抛出异常-addObject:
.那count
是0也是有道理的,如果self.storedTimeZones
是nil
,因为消息的结果nil
是nil
或0
或NO
,这取决于你所期望的类型.
您真正需要做的就是正确诊断问题,就是检查self.storedTimeZones
您最近的NSLog
陈述.设置断点并查看该属性的内容.有用的命令是:
po self.storedTimeZones
po [self.storedTimeZones class]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
584 次 |
最近记录: |