在覈心數據中,當使用setPrimitiveValue與對象的常規訪問器方法進行更改時,是否有一些技巧保存對託管對象屬性的更改?核心數據:setPrimitiveValue並保存更改
爲了避免觸發我的FRC的通知方法(controllerWillChangeContent,controllerDidChangeObject等),我已經在幾種情況下切換到使用setPrimitiveValue和setPrimitiveAttributeName。在這兩種情況下,在對核心數據對象進行更改並保存託管對象上下文之後,這些更改看起來像是他們所做的(即我可以看到NSLog中的更改),但實際上它們已丟失(即,如果退出應用程序模擬器並重新運行它,FRC重新加載,以及我認爲我改變的屬性都消失了)。
從Apple示例複製保存代碼,並且我的Core Data實體的託管對象類由Xcode生成。一切我已經從蘋果公司和本網站表明,這是對setPrimitive方法的有效使用讀,雖然我承認我必須缺少的這些setPrimitive功能到底是如何工作的一些理解......
代碼:
// header file for Managed Object sub class generated by xcode from my core data entity:
#import <CoreData/CoreData.h>
@interface PlannedItem : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * ptType;
@property (nonatomic, retain) NSNumber * whenOrder;
@end
// .m file for Managed Object subclass
#import "PlannedItem.h"
@implementation PlannedItem
@dynamic ptType;
@dynamic whenOrder;
@end
// trying to use setPrimitiveValue or even setPrimitiveWhenOrder to modify
// this is in my view controller
// p is a pointer to PlannedItem
int oldOrder = [p.whenOrder intValue];
[p setPrimitiveValue:[NSNumber numberWithInt:(oldOrder +1)] forKey:@"whenOrder"];
// later on in same method, save is executed.
if (![[self managedObjectContext] save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
NSLog(@"Saved");
感謝您的任何提示
hmmmmm ....貌似willChangeValueForKey和didChangeValueForKey就是我要找的。我不能發佈答案,但我會稍後,如果我不碰到一個更好的建議... – kris 2011-06-01 20:04:19
我收回 - willChangeValueForKey和didChangeValueForKey正在幫助,但他們導致FRC再次調用內容更改通知給代表。我想我希望我的FRC和一切都能夠及時更新我使用setPrimtiveValue所做的更改,但是我也不想在這種情況下運行這些內容更改通知方法。我想我不能雙方都有,我可以嗎? – kris 2011-06-01 20:27:39
KVO調用willChange等是必須的核心數據在此之後開始行動。 – Jonathan 2011-06-02 00:29:58