gpt4 book ai didi

ios - 魔法记录 : Loading a record to be updated in a local context

转载 作者:行者123 更新时间:2023-11-29 02:39:43 24 4
gpt4 key购买 nike

我目前正在使用 Magical Records 保存记录,如下所示:

NSManagedObjectID *objID = [existingItem objectID];
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
CustomNSMO *item;
if(newItem) item = [CustomNSMO MR_createEntityInContext:localContext];
else item = [localContext objectWithID:objID];
item.sync = 1;
item.relID = @"Some String";
}completion:^(BOOL success, NSError *error) {
//do something
}];

这很好用。如果我查询已设置 sync 的所有项目,我会得到我期望的结果,即

  NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(sync >= 1)"];
NSArray *objects = [CustomNSMO MR_findAllSortedBy:@"sync" ascending:YES withPredicate:predicate];

给我一​​个新的或更新的对象的数组。

然后(在一些服务器业务之后)我想找到所有 sync>= 1 的结果并将其设置为零。这就是奇怪行为发生的时候。我一直在尝试通过以下任一方式在本地上下文中获取一系列结果

  NSManagedObjectContext *localContext    = [NSManagedObjectContext MR_context];
NSArray *objects = [CustomNSMO MR_findAllSortedBy:@"sync" ascending:YES withPredicate:predicate inContext:localContext];
for(CustomNSMO *item in objects) {
item.sync = 0;
}
[localContext MR_saveToPersistentStoreAndWait];

  [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
NSArray *objects = [CustomNSMO MR_findAllSortedBy:@"sync" ascending:YES withPredicate:predicate inContext:localContext];
for (SyncObject *currentObj in objects)
{
currentObj.sync = @0;
}
} completion:nil];

如果在首次创建项目时设置了relID,那么这一切都很好。我可以编辑该项目(更改relID),并且可以在所有上下文中观察到更改。但是,如果第一次创建该项目时,它的 relIDnil,则使用上面的代码执行以下操作后会出现问题:

1) 更新项目,将 nil relID 更改为某些非nil

2) 将项目保存到数据库

3) 加载项目(通过搜索“sync”)

在除 MR_defaultContext 之外的任何上下文中,relID 都保持为 nil。如果我查看MR_defaultContext中的对象,那么我会看到正确更新的relID。如果我在不同的上下文中查看它,它就是nil。这意味着本地上下文上的 sync 更新会覆盖默认上下文上的 relID 值(将其设置为nil)。 p>

最佳答案

一些想法:

if(newItem) item = [CustomNSMO MR_createEntityInContext:context];

应该是:

if(newItem) item = [CustomNSMO MR_createEntityInContext:localContext];

您不想在 +saveWithBlock: 中使用不同的上下文。

此外,这一行:

else item = [localContext objectID];

我想你是说 [localContext objectWithID:objID] 还是 [localContext existingObjectWithID:objID error:error]

关于ios - 魔法记录 : Loading a record to be updated in a local context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com