2012-02-10 69 views
1

由於「onlineLastUpdatedAt」,我收到錯誤消息「EXC_BAD_ACCESS」,我不明白爲什麼。這裏是我的代碼:NSUserDefaults EXC_BAD_ACCESS

#define IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY @"iMonggoFetcher.ImonggoOnlineProductsLastUpdatedAt" 

- (void) saveLastUpdatedAtDate{ 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSMutableArray *onlineLastUpdatedAt = [[defaults objectForKey:IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY] mutableCopy]; 
    NSString *onlineLastUpdatedAtValue = [iMonggoFetcher lastUpdatedAtDate]; 

    if (!onlineLastUpdatedAt) onlineLastUpdatedAt = [[NSMutableArray alloc]init]; 

    if([onlineLastUpdatedAt containsObject:onlineLastUpdatedAtValue]){ 
     NSLog(@"onlineLastUpdated at contains a value for onlineLastUpdatedatValue"); 
     //[defaults setObject:onlineLastUpdatedAt forKey:IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY]; 

    }else{ 
     NSLog(@"!onlineLastUpdated at contains a value for onlineLastUpdatedatValue"); 

     [onlineLastUpdatedAt addObject:onlineLastUpdatedAt]; 
     NSLog(@"mutablearray: %@", onlineLastUpdatedAt); 
     [defaults setValue:onlineLastUpdatedAt forKey:IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY]; 
     [defaults synchronize]; 
    } 
    NSLog(@"added to defaults: %@ ",onlineLastUpdatedAtValue); 
} 
+0

驗證「onlineLastUpdatedAt」是否已正確初始化。 – 2012-02-10 07:02:06

+0

是的,我只是想出了。我錯過了類型[onlineLastUpdatedAt addObject:onlineLastUpdatedAt];我將它添加到自己。 – acecapades 2012-02-10 07:04:01

+0

無論是'[onlineLastUpdatedAt addObject:onlineLastUpdatedAt];''或'[onlineLastUpdatedAt addObject:onlineLastUpdatedAtValue];'? – Ilanchezhian 2012-02-10 07:20:59

回答

1

你打電話setValue:ForKey:時您應該致電setObject:ForKey

[defaults setValue:onlineLastUpdatedAt forKey:IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY]; 

替換爲:

[defaults setObject:onlineLastUpdatedAt forKey:IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY]; 
+0

'setValue:.. .'是Key-Value編碼框架的一部分,經常被集合對象實現的'setObject ...'方法困惑。 – ikuramedia 2012-02-10 09:17:30

-1

你不能直接輸入任何物體進入NSUserDefaults 首先你必須是對象轉換成NSDataNSMutableData 試試這個

NSData *dataVal = [NSKeyedArchiver archivedDataWithRootObject:onlineLastUpdatedAt]; 
[defaults setObject:dataVal forKey:IMONGGO_PRODUCTS_ONLINE_LAST_UPDATED_AT_KEY]; 
[defaults synchronize]; 
+0

是的,你可以直接插入對象到用戶的默認值 – 2012-02-10 07:21:13

+0

你確定,因爲我也發現這個錯誤,當我使用上面的代碼,它適用於我 – hchouhan02 2012-02-10 07:23:55

+0

是的,你可以寫你自定義對象到NSUserDefaults,因爲你必須實現NSCoding協議..這裏是鏈接https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Archiving/Articles/codingobjects.html#//apple_ref/doc/uid/20000948-BCIHBJDE – 2012-02-10 07:26:48