如何获取 NSManagedObjectId 并检索数据

Posted

技术标签:

【中文标题】如何获取 NSManagedObjectId 并检索数据【英文标题】:How to get NSManagedObjectId and retrieve data 【发布时间】:2014-02-08 23:02:33 【问题描述】:

我有一个名为 HomeTableViewController 的 TableViewController,它加载了 Core Data 数组中的数据。我试图从选定的单元格中获取对象 ID,如下所示:

//Fetch Entity

NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"OwedMoney"];

//Create an array that stores the contents of that entity

youOweArray = [[context executeFetchRequest:fetchRequest error:nil] mutableCopy];

//Create managedObjectId

NSManagedObject *YouOweData  = [youOweArray objectAtIndex:0];
NSManagedObjectID *moID = [YouOweData objectID];

//Successfully got the managedObjectId

NSLog(@"This is the id %@", moID);

我能够获得 managedObjectId。但困难的部分来了。现在我想遍历我的数组并获取所有对象。然后我想获取等于所选单元格的对象并访问它的“付费”布尔值。我是这样做的:

 BOOL Found =  NO;
OwedMoney *OwedObject;
NSManagedObjectID *OwedId = [OwedObject objectID];

for (OwedMoney *OwedObject in youOweArray)


    NSLog(@"%@", OwedObject);
    if (OwedId == moID)
    
        Found = YES;
        break;
    



if (Found == YES)


BOOL isPaid = YES;
OwedMoney *Object = OwedObject;
Object.paid = [NSNumber numberWithBool:isPaid];

NSLog(@"Is it paid: %@",Object.paid? @"Yes":@"No");

虽然当我运行应用程序时,Found 永远不会等于 YES。这意味着我的对象 ID 不匹配。我想知道如何找到选定的表格视图单元格,从中获取 NSManagedObjectId,然后访问它的属性。

感谢所有帮助,提前致谢。

【问题讨论】:

【参考方案1】:

您正在遍历数组,但从未真正将 OwedId 更改为您在数组中查看的项目。这应该有效:

BOOL Found =  NO;
OwedMoney *Object;


for (OwedMoney *OwedObject in youOweArray)

    NSManagedObjectID *OwedId = [OwedObject objectID];

    NSLog(@"%@", OwedObject);
    if (OwedId == moID)
    
        Found = YES;
        Object = OwedObject;
        break;
    



if (Found)


    BOOL isPaid = Found;
    Object.paid = [NSNumber numberWithBool:isPaid];

    NSLog(@"Is it paid: %@",Object.paid.boolValue? @"Yes":@"No");

【讨论】:

我实现了这个,付费仍然没有返回 啊,没关系,我的小错误,它正在返回是的!【参考方案2】:

我认为问题出在第 9 行。

if(OweID == moID)

可能是被管理对象的 ID 对象(不是 ID 信息本身)发生了变化。使用 == 仅比较引用。尝试使用

if([OweID isEqual::moID])

托马斯

【讨论】:

以上是关于如何获取 NSManagedObjectId 并检索数据的主要内容,如果未能解决你的问题,请参考以下文章

NSManagedObjectID 与自定义 UUID 标识符属性 - 获取性能

从一个上下文到另一个上下文使用 NSManagedObjectID 是不是安全?

在多个 NSPersistentStoreCoordinator-s 之间传递 NSManagedObjectID-s 是不是安全?

-objectRegisteredForID:和--existingObjectWithID之间有什么区别:错误:?

从头认识Spring-3.8 简单的AOP日志实现(注解版)-扩展添加检查订单功能,以便记录并检測输入的參数

从头认识Spring-3.4 简单的AOP日志实现-扩展添加检查订单功能,以便记录并检測输入的參数