2012-04-19 105 views
1

我與編輯掙扎/核心數據保存和需要在這一些幫助。我正在使用NSFetchedResultsController,並且在Core Data中有一個名爲Golfer的實體,具有attributes-first_name,last_name,email_id和其他實體。所以,我知道如何從數據庫中添加和刪除高爾夫球手。核心數據編輯/保存屬性在實體

我的工作稱爲ViewManager一個視圖控制器(我的所有類還挺基本視圖),並有2-3個自定義UIViews裏面。每當我需要它們時,我都會進行動畫處理。

我向桌面視圖中添加一個高爾夫球手,然後在didSelectRow tableview方法中,我在同一個ViewManager控制器中呈現我的編輯視圖,並嘗試使用以下代碼更新編輯視圖中的文本框,但它隨機更新索引桌面視圖,而不是爲我工作。任何幫助將不勝感激。

- (IBAction)saveEditGolfersView:(id)sender 
{ 
    AppDelegate * applicationDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 
    NSManagedObjectContext * context = [applicationDelegate managedObjectContext]; 

    // Retrieve the entity from the local store -- much like a table in a database 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Golfer" inManagedObjectContext:context]; 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entity]; 

    // Set the sorting -- mandatory, even if you're fetching a single record/object 
    NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"first_name" ascending:YES]; 

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,nil]; 
    [request setSortDescriptors:sortDescriptors]; 
    [sortDescriptors release]; sortDescriptors = nil; 
    [sortDescriptor1 release]; sortDescriptor1 = nil; 

    NSError * error; 

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

    for(int i = 0; i<[objects count]; i++) 
    { 
     Golfer * golfguy = [objects objectAtIndex:i]; 

     golfguy.first_name = mEditFirstName.text; 
     golfguy.middle_name = mEditMiddleName.text; 
     golfguy.last_name = mEditLastName.text; 
     golfguy.email_id = mEditEmailField.text; 
     golfguy.contactNumber = mEditContactNum.text; 
     golfguy.picture = mEditPictureView.image; 

     NSLog(@"name-%@", golfguy.first_name); 
    } 

    [request release]; request = nil; 

    error = nil; 
    [context save:&error]; 

    [UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseOut 

        animations:^ { 

         mEditGolfersView.frame = CGRectMake(-480, mEditGolfersView.frame.origin.y, mEditGolfersView.frame.size.width, mEditGolfersView.frame.size.height); 

        } 

        completion:^(BOOL finished) { 
         mEditGolfersView.hidden = YES; 

        }]; 
} 

回答

1

如果我讀這碼是否正確,然後-(IBAction)saveEditGolfersView:(id)sender通話將設置所有的高爾夫球手的確切性質,這是我想到的是不是你想要的。

我不太清楚是什麼問題,但我猜測,你需要一個NSPredicate爲了改變正確的高爾夫(S)與NSFetchRequest一起去。

也許我錯過了什麼,但是這個代碼對我說:「哎,我要加載所有的高爾夫球手在數據庫中,他們的名字命令他們,然後他們所有的屬性設置爲完全一樣的此頁面上的文本字段「。只是聽起來像壞消息

編輯只是一個高爾夫球手,一定要保存你的財產,其中一些正在編輯的高爾夫球手。由於您將managedObjectContext保存在applicationDelegate上,因此它將保持活動狀態,從而使您的核心數據對象保持活動狀態。這將避免您在保存視圖中執行的昂貴的提取操作。但是,如果你不想給一個參考保持到了高爾夫球手的對象,每個NSManagedObjectobjectId,這是核心數據使用的標識符。你可以在獲取謂詞使用objectId像這樣:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"objectId == %@", self.editingGolferObjectId]; 
[request setPredicate:predicate]; 

我會選擇保留對象的引用你的情況,而不是objectId

+0

感謝肖恩回去我。這種IBAction方法是保存信息(當你更新高爾夫球員信息,如他們的名字,電子郵件ID,圖片等)我的代碼有什麼問題?我想我正在循環他們正確執行獲取請求? – 2012-04-20 02:11:42

+0

你是不是想改變編輯控制器中的某個高爾夫球手?你想改變多少球員? – 2012-04-20 03:23:00

+0

我正在嘗試通過點擊表視圖做選擇行方法來編輯特定的高爾夫球手。我在代碼中循環不正確,但是如何獲得每個高爾夫球手的索引,然後我嘗試編輯這些索引?請在這裏幫助我! – 2012-04-20 07:28:13