核心数据在分配了objectID的表中重复

时间:2013-10-19 16:21:52

标签: ios objective-c core-data

所以我有表格,我已经设置了一个名为name的属性。第一个表抓取了name的不同值,因为可以有多个名称相同的东西。下一个表视图打开了此特定值的副本。

但是,我遇到的问题是从重复项中获取的信息仅来自最新的伴随属性。所以他们都指向相同的信息。

以下是抓取要放置在表格中的对象的方法。

AppDelegate.m

- (NSArray *)allLikePlaces:(id)place {

    NSManagedObjectContext *moc = [[SVAppDelegate sharedAppDelegate] managedObjectContext];

    NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Place" inManagedObjectContext:moc];

    [fetch setEntity:entity];

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@", place];

    [fetch setPredicate:predicate];

    NSError *error;
    NSArray *result = [moc executeFetchRequest:fetch error:&error];

    if(error){
        NSLog(@"allPlaces error: %@", [error localizedDescription]);
    }

    return result;
}

这是将对象放在表格中的方法。

TableView.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    SVAppDelegate *ad = [SVAppDelegate sharedAppDelegate];
    NSArray *list = [ad allLikePlaces:_place];

    NSManagedObject *obj = list[indexPath.row];
    cell.textLabel.text = [obj valueForKey:@"name"];

    return cell;
}

我可以让每个对象显示相应的数据,而不仅仅是最新的记录。

我一直在尝试实施基于objectID的实施,但没有成功。我非常感谢你提供任何帮助。

1 个答案:

答案 0 :(得分:0)

我不确定我理解你的评论

  

名称是UNI,该表中的所有单元格将引用该名称   最后输入了UNI这个名字的记录而不是他们的伴随记录   记录中的属性。

但正如Martin所说,您的谓词会找到name属性类似place的所有对象。所以,所有名字都是平等的。

现在,如果要为每个对象创建唯一标识符,则应创建另一个属性,如uuidNSString类型),并同时使用一种唯一标识符生成器填充它您设置了name属性。 Apple提供了几种方法。例如UUID Strings With Cocoa。积分归 @Abizern

关于显示它,只需在您运行cellForRowAtIndexPath时抓住。 e.g。

NSString* uuidString = [obj valueForKey:@"uuid"];
// assign it to whatever UI elements you want
// e.g. cell.detailTextLabel.text = uuidString;