2012-02-10 13 views
1

"onlineLastUpdatedAt"のために "EXC_BAD_ACCESS"というエラーメッセージが表示されますが、その理由はわかりません。ここに私のコードです:あなたが直接すべてのNSUserDefaults 初に任意のオブジェクトを入力することはできません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」が正しく初期化されているかどうかを確認します。 –

+0

ええ、私はちょうどそれを考え出した。私はタイプ[onlineLastUpdatedAt addObject:onlineLastUpdatedAt]を見逃しました。私はそれを自分自身に加えました。 – acecapades

+0

それは '[onlineLastUpdatedAt addObject:onlineLastUpdatedAt];または' [onlineLastUpdatedAt addObject:onlineLastUpdatedAtValue]; 'ですか? – Ilanchezhian

答えて

1

を試しNSDataNSMutableData にそのオブジェクトを変換する必要があります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

-1

あなたがsetValue:ForKey:ときを呼んでいるこの

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

はい私はあなたが直接このオブジェクトをオブジェクトのデフォルトに挿入することができます –

+0

私もこのエラーが見つかりましたので、私は上記のコードを使用したときに確信しています – hchouhan02

+0

はい、あなたはNSUserDefaultsにカスタムオブジェクトを書くことができますプロトコルはここにありますhttps://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Archiving/Articles/codingobjects.html#//apple_ref/doc/uid/20000948-BCIHBJDE –