2013-10-20 71 views
2

我對iOS核心數據很新,我試圖在我的iPad應用程序中使用它。iOS核心數據udpate:更改沒有保存

我有這樣一個模型:

Customer.h

#import <CoreData/CoreData.h> 
@interface Customer : NSManagedObject 
@property (nonatomic,strong) NSString *name; 
@end 

Customer.m

#import "Customer.h" 
@implementation Customer 
@synthesize name; 
@end 

表視圖控制器顯示所有的客戶在數據庫中。通過選擇客戶詳細信息視圖推賽格瑞開始和客戶設置:如果改變

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    // Get the new view controller using [segue destinationViewController]. 
    // Pass the selected object to the new view controller. 

    CustomerDetailViewController *detailViewController = (CustomerDetailViewController*) [segue destinationViewController]; 
    detailViewController.customer = [customers objectAtIndex:self.tableView.indexPathForSelectedRow.row]; 
} 

詳細視圖控制器的動作保存應該保存客戶:

- (IBAction)save:(id)sender 
{ 
    AppDelegate *delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
    NSManagedObjectContext *moc = [delegate managedObjectContext]; 
    self.customer.name = self.nameTextField.text; 
    NSError *error; 
    if (![moc save:&error]) 
    { 
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]); 
    } 
} 

雖然名稱改變,所做的更改不會保存:沒有錯誤,但(被零,日誌未顯示錯誤)出現......

此外:

BOOL customerHasChanges = [self.customer hasChanges]; 
    BOOL mocHasChanges = [moc hasChanges]; 

都是假的!

但是插入新的實體工作正常:

Customer *customer = [NSEntityDescription insertNewObjectForEntityForName:@"Customer" inManagedObjectContext:self.managedObjectContext]; 
[customer setValue:@"Mars Inc." forKey:@"name"]; 
NSError *error; 
[self.managedObjectContext save:&error]; 

我在做什麼錯?

在此先感謝您的幫助!!!!!

Luca

+0

你如何檢查它保存了客戶名? – RyanR

+0

我懷疑您的託管對象上下文有問題。嘗試通過託管對象獲取它:'customer.managedObjectContext'。 – Mundi

+0

@RyanR:我的意思是,儘管名稱實際上已經改變(self.customer.name = self.nameTextField.text),實體並沒有改變(例如[customer hasChanges]返回false)。 – Lula

回答

3

您在執行文件中有錯誤。使用@dynamic而不是@synthesize

+0

非常感謝!這解決了我的問題!您能否快速解釋我爲什麼要使用@dynamic而不是@property? – Lula

+0

請閱讀[官方文檔](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html)中的全部內容。 – Mundi

+0

謝謝你。它也適用於我。但是,你仍然可以解釋爲什麼它不適用於@synthesize? – webdev