2013-04-25 112 views
1

當試圖保存TRUE值轉換爲包含Boolean屬性的管理對象時,我得到一個錯誤EXC_BAC_ACCESS錯誤EXC_BAC_ACCESS。保存核心數據布爾字段

id delegate = [[UIApplication sharedApplication] delegate]; 
    self.managedObjectContext = [delegate managedObjectContext]; 

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"TrafficCameraInfo" 
               inManagedObjectContext:self.managedObjectContext]; 


    [fetchRequest setEntity:entity]; 
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"code=%@",self.selectedTrafficCamera.code]]; 

    NSError *error; 
    TrafficCameraInfo *cgTrafficCamera; 

    cgTrafficCamera = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] lastObject]; 

    NSString *alertMessage; 
    if (cgTrafficCamera.favourite == NO){ 
     cgTrafficCamera.name = @"TEST";     <-- works ok 
     cgTrafficCamera.favourite = 1;     <-- causes an error 
    } else { 
     cgTrafficCamera.favourite = 0; 
    } 

    error = nil; 
    if (![self.managedObjectContext save:&error]) { 

管理對象接口看起來是這樣的:

@interface TrafficCameraInfo : NSManagedObject 

@property (nonatomic, retain) NSString *code; 
@property (nonatomic, retain) NSString *postCode; 
@property (nonatomic, retain) NSNumber *latitude; 
@property (nonatomic, retain) NSNumber *longitude; 
@property (nonatomic, retain) NSString *name; 
@property (nonatomic, retain) NSString *url; 
@property (nonatomic) Boolean favourite; 

@end 

其他地方在我的應用我被路過1以更新另一個布爾字段,我不遇到問題。

任何想法是什麼導致錯誤?

回答

2

布爾是一個簡單的標量非指針數據類型。核心數據屬性始終存儲爲對象。數字數據類型的Objective-C對象包裝是NSNumber。所以,如果favourite是一個普通存儲的屬性,你應該把它聲明爲:

@property (nonatomic, retain) NSNumber *favourite; 

分配將這樣進行:

cgTrafficCamera.favourite = [NSNumber numberWithBool:YES]; // Obj-C style is "YES/NO" for BOOL 

或者這樣,如果你喜歡:

cgTrafficCamera.favourite = [NSNumber numberWithBool:1]; 

如果你不需要存儲布爾值,你可以保留它,使它成爲一個瞬態屬性。在這種情況下,你可能需要擺脫「(非原子)」。

+0

非常感謝回覆的設置數據。它似乎工作正常,但要確認它,我需要檢查數據庫中已更新的值。我會用'if(cgTrafficCamera.favourite == [NSNumber numberWithInt:0])或者if(cgTrafficCamera.favourite == [NSNumber numberWithBool:YES])替換'if(cgTrafficCamera.favourite == NO)''其他? – cullener 2013-04-25 10:18:21

+0

更新:'(cgTrafficCamera.favourite == [NSNumber numberWithInt:0])'工作正常。感謝您的幫助 – cullener 2013-04-25 13:25:07

+0

不客氣。樂意效勞。 – Wienke 2013-04-25 14:36:21

3

我想在你的核心數據屬性表中定義的「最愛」變量BOOL,以及這意味着它是一個NSNumber類型,所以你應該使用的NSNumber