从NSArray访问对象时出现问题

时间:2014-10-29 19:23:19

标签: ios objective-c nsarray nsuserdefaults

我正在尝试访问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的新手。

1 个答案:

答案 0 :(得分:0)

NSArray元素是对象。如果没有先将它们转换为整数,则无法将它们打印为整数。将指针强制转换为int只会给出指针本身的int视图(因此您打印的整数是一个很大的“随机”数字)。

要实际打印恰好是NSNumber的NSArray元素的值,您可以:

  1. 使用%@格式打印实际对象(不是指向int的指针)。
  2. 使用int方法将对象转换为intValue表单(或使用NSInteger方法转换为integerValue表单,或使用{转换为long表单{1}}等。)
  3. 请注意,解决方案#1只应用于NSLog语句,而不能用于“生产”代码,因为longValue格式调用对象的%@方法,不能保证产生一致的表示(虽然很难想象NSNumber怎么没有。)

    另请注意,如果有问题的对象 NSNumber或NSString,那么description等会抛出运行时错误。