2014-10-29 73 views
-1
訪問對象時

我試圖訪問一個NSArray,我莫名其妙地失敗(例如:我保存它,並從NSUserDefaults加載):問題從NSArray中

節能:

-(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])]; 
    } 

不知怎的,我失去了一些東西,我得到這個回報˚F ROM 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

+2

NSArray元素是對象。沒有先將它們轉換爲整數,您無法將它們打印爲整數。將指針轉換爲int僅爲您提供指針的int視圖。 – 2014-10-29 19:25:19

+0

@HotLicks是對的。您可以通過向每個對象發送'integerValue'來獲取整數值。 – Alladinian 2014-10-29 19:27:14

+0

真棒,它的工作,謝謝! – 2014-10-29 19:40:29

回答

0

NSArray元素是對象。沒有先將它們轉換爲整數,您無法將它們打印爲整數。將指針轉換爲int只會給出指針本身的int視圖(因此您打印的整數是一個大的「隨機」數字)。

實際打印恰好是一個NSNumber一個NSArray元素的值,您可以:

  1. 打印,使用%@格式,實際的對象(不是指針強制轉換爲int)。
  2. 使用intValue方法將對象轉換至int形式(或以NSInteger形式使用integerValue方法,或是用longValuelong形式,等等)。

請注意,解決方案#1只應該用於的NSLog語句,而不是「生產」的代碼,因爲%@格式調用它不能保證產生一致的表示對象的description方法(儘管它很難想象如何不爲NSNumber)。

另請注意,如果有問題的對象是而不是,則NSNumber或NSString,然後intValue等將引發運行時錯誤。