2013-09-05 138 views
1

我有一個具有3個屬性的實體:名字,姓氏和分數。我能夠通過名字和姓氏搜索一個人的分數,並將其顯示在UILabel上(迄今爲止這麼好),我的問題是我不知道如何用新值更新分數屬性。低於我用來執行搜索並顯示舊值的代碼。使用核心數據更新屬性

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Scorecard" inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc]init]; 
[request setEntity:entitydesc]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstname like %@ and lastname like %@", self.firstnameTextField.text, self.lastnameTextField.text]; 
[request setPredicate:predicate]; 

NSError *error; 
NSArray *integer = [context executeFetchRequest:request error:&error]; 

if(integer.count <= 0){ 
    self.displayLabel.text = @"No records found"; 

} 

else { 

    NSNumber *score; 

    for (NSManagedObject *object in integer) { 


     score = [object valueForKey:@"score"]; 

     int x = [score intValue]; 

     // New Value is going to be the old value + 2 
     int y = x + 2; 

     //displays old value found 
     [self.displayLabel setText:[NSString stringWithFormat:@"old value %d",x]]; 

    } 

} 

更新#1

我能更新屬性並保存它,但是我有我的新的整數值轉換爲字符串,然後將其轉換回一個整數。我不喜歡額外的步驟。如果有人有另一個建議,請讓我知道並感謝您的幫助。低於更新的代碼。

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Scorecard" inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc]init]; 
[request setEntity:entitydesc]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstname like %@ and lastname like %@", self.firstnameTextField.text, self.lastnameTextField.text]; 
[request setPredicate:predicate]; 

NSError *error; 
NSArray *integer = [context executeFetchRequest:request error:&error]; 

if(integer.count <= 0){ 
    self.displayLabel.text = @"No records found"; 

} 

else { 

    NSNumber *score; 

    for (NSManagedObject *object in integer) { 

     score = [object valueForKey:@"score"]; 

     int x = [score intValue]; 
     int y = x + 2; 
     NSString* z = [NSString stringWithFormat:@"%d",y]; 

     [object setValue:[NSNumber numberWithInteger:[z integerValue]] forKey:@"score"]; 
     [self.displayLabel setText:[NSString stringWithFormat:@"Value updated to %d",y]]; 
     [context save:&error]; 

    } 

} 

更新2

感謝凱文的答案,我能解決我的問題。我現在可以用我的核心數據中的一個屬性的整數值替換爲另一個整數值。在我的代碼下面終於工作。

NSEntityDescription *entitydesc = [NSEntityDescription entityForName:@"Scorecard" inManagedObjectContext:context]; 
NSFetchRequest *request = [[NSFetchRequest alloc]init]; 
[request setEntity:entitydesc]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstname like %@ and lastname like %@", self.firstnameTextField.text, self.lastnameTextField.text]; 
[request setPredicate:predicate]; 

NSError *error; 
NSArray *integer = [context executeFetchRequest:request error:&error]; 

if(integer.count <= 0){ 
self.displayLabel.text = @"No records found"; 

} 

else { 

NSNumber *score; 

for (NSManagedObject *object in integer) { 

    score = [object valueForKey:@"score"]; 

    int x = [score intValue]; 
    int y = x + 2; 

    [object setValue:[NSNumber numberWithInt:y] forKey:@"score"]; 
    [self.displayLabel setText:[NSString stringWithFormat:@"Value updated to %d",y]]; 
    [context save:&error]; 

} 

} 

回答

1

像以前那樣再設置的它的得分財產

[object setValue:[NSNumber numberWithInt:y] forKey:@"score"]; 
+0

[object setValue:[NSNumber numberWithInteger:[score integerValue]] forKey:@「score」];我添加了這一行代碼,因爲是一個整數,我想更新的數字,但是當我檢查數據的數字沒有更新任何建議? – Fxbaez

+0

即時通訊沒有看到任何改變導致即時分配舊值,我的壞。任何我可以分配「int y」值的方式?我想我幾乎在那裏,但我失去了一些東西。 – Fxbaez

+0

更新爲int y,對不起 – Kevin

0

我的第一個建議是使用NSManagedObject的子類,而不是使用原語獲取的對象。您可以通過使用核心數據檢查器並更改實體類來完成此操作。

現在,要對分數進行更改,您需要找到需要更改的對象並分配值。一旦賦值,你需要保存對象所屬的NSManagedObject。上下文成功保存後,您的更改將保持不變。