2012-04-19 51 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