2012-10-10 29 views
0

我有一個相對較小的核心數據應用程序。它包含使用存儲在NSUserDefaults中的一些用戶首選項生成的對象。當用戶更改他們的偏好時,是否有可能使用更新的偏好重新計算當前的所有核心數據元素?可以刷新整個核心數據對象嗎?

+0

我會這樣想。你爲什麼認爲這是不可能的? – 2012-10-10 12:48:30

+0

當用戶更改他們的偏好時,我將如何更改已存儲的所有數據?有沒有一種方法可以用來遍歷所有文檔對象? (也許在另一個線程中)。或者我必須擦除所有數據並使用新的首選項重新創建所有數據? –

回答

1

是的,只需檢查用戶首選項是否已在您的代理上發生更改,然後更新您的NSManagedObject元素。

您可以使用這樣的查詢您保存的對象

// Query your already saved objects and change their values 
- (void)changeObjects { 
    NSArray *array = [CoreDataUtils fetchEntity:@"MyObject" withPredicate:nil inContext:moc]; 

    for (NSManagedObject *obj in array) { 

     [obj setValue:@"newValue" forKey:@"columName"]; 
    } 

    [moc save:nil]; 
} 
+ (NSArray *)fetchEntity:(NSString *)entityName withPredicate:(NSPredicate *)predicate inContext:(NSManagedObjectContext *)moc 
{ 
    NSFetchRequest* request = [[NSFetchRequest alloc] init];  
    NSEntityDescription* entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:moc]; 
    [request setEntity:entity]; 
    [request setPredicate:predicate]; 

    NSError* error; 

    return [moc executeFetchRequest:request error:&error]; 
} 
+0

謝謝,這看起來正是我所需要的。我試圖實施它,並接受答案,如果它的工作。 :) –

+0

如果你需要更多的幫助不要猶豫,問:D – alexandresoli

+0

您的代碼是否更新基於「columnName」的其他值? –