我正在尝试访问NSArray
并且我以某种方式失败(例如:我将其保存并从NSUserDefaults
加载):
存储
-(id)init{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"set1"] == nil ){
NSMutableArray* aux =[[NSMutableArray alloc] initWithCapacity:8];
[aux addObject:@1];
[aux addObject:@2];
[aux addObject:@3];
[aux addObject:@0];
[defaults setObject:aux forKey:@"set1"];
[defaults synchronize];
[defaults setBool:TRUE forKey:@"sound"];
}
return [super init];
}
装载
-(void)onEnter{
[super onEnter];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray* save = [[defaults arrayForKey:@"set1"] mutableCopy];
CCLOG(@"%@",save);
[_S1 showStars:((int)[save objectAtIndex:0])];
[_S2 showStars:((int)[save objectAtIndex:1])];
[_S3 showStars:((int)[save objectAtIndex:2])];
[_S4 showStars:((int)[save objectAtIndex:3])];
}
不知怎的,我错过了一些东西,我从CCLOG(@"%@",save);
2014-10-29 16:15:32.155 IM[2091:70b] (
1,
2,
3,
0
)
使用CCLOG(@"%i",((int)[save objectAtIndex:0]))
2014-10-29 16:15:32.156 IM[2091:70b] 176633792
2014-10-29 16:15:32.156 IM[2091:70b] 176633808
2014-10-29 16:15:32.157 IM[2091:70b] 159857616
2014-10-29 16:15:32.157 IM[2091:70b] 159857632
我尝试了一些事情,没有任何作用。
对不起,如果这是一个愚蠢的问题,我是Objective-C
的新手。
答案 0 :(得分:0)
NSArray元素是对象。如果没有先将它们转换为整数,则无法将它们打印为整数。将指针强制转换为int只会给出指针本身的int视图(因此您打印的整数是一个很大的“随机”数字)。
要实际打印恰好是NSNumber的NSArray元素的值,您可以:
%@
格式打印实际对象(不是指向int
的指针)。int
方法将对象转换为intValue
表单(或使用NSInteger
方法转换为integerValue
表单,或使用{转换为long
表单{1}}等。)请注意,解决方案#1只应用于NSLog语句,而不能用于“生产”代码,因为longValue
格式调用对象的%@
方法,不能保证产生一致的表示(虽然很难想象NSNumber怎么没有。)
另请注意,如果有问题的对象不 NSNumber或NSString,那么description
等会抛出运行时错误。