【问题标题】:Issue when accessing objects from NSArray从 NSArray 访问对象时的问题
【发布时间】:2014-10-29 19:23:18
【问题描述】:

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

【问题讨论】:

  • NSArray 元素是对象。如果不先将它们转换为整数,则无法将它们打印为整数。将指针转换为 int 只会为您提供指针的 int 视图。
  • @HotLicks 是对的。您可以通过向每个对象发送integerValue 来获取整数值。
  • 太棒了,它成功了,谢谢!
  • 而您的init 方法的代码全错了。
  • @HotLicks,您能否将您的回复发布为答案,以便 OP 接受并标记为已回答?

标签: ios objective-c nsarray nsuserdefaults


【解决方案1】:

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

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

  1. 使用%@ 格式打印实际对象(不是转换为int 的指针)。
  2. 使用intValue方法将对象转换为int形式(或使用integerValue方法转换为NSInteger形式,或使用longValue等方法转换为long形式)。

请注意,解决方案#1 应该只用于 NSLog 语句,而不是“生产”代码,因为 %@ 格式化调用对象的 description 方法,这不能保证产生一致的表示(虽然这很难想象一下 NSNumber 的情况如何)。

还要注意,如果有问题的对象不是 NSNumber 或NSString,那么intValue 等人将引发运行时错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    相关资源
    最近更新 更多