gpt4 book ai didi

ios - 在 RLMArray 上添加或更新对象?

转载 作者:行者123 更新时间:2023-11-28 21:27:53 26 4
gpt4 key购买 nike

我有一个内置了 Realm 和 CloudKit 的应用程序。该应用程序从 CloudKit 容器中获取数据,然后将其添加到 Realm。不过,两次提取中的一次具有一些链接的 Realm 模型,这就是困难所在。

我当前的代码如下所示:

NSPredicate *predicate = [NSPredicate predicateWithValue:YES];

CKDatabase *publicDatabase = [[CKContainer containerWithIdentifier:@"iCloud.com.myname.myapp"] publicCloudDatabase];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Restaurant" predicate:predicate];
CKQueryOperation *queryOp = [[CKQueryOperation alloc] initWithQuery:query];
queryOp.recordFetchedBlock = ^(CKRecord *record)
{
RLMRealm *realm = [RLMRealm defaultRealm];

Restaurant *restaurant = [[Restaurant alloc] init];
restaurant.name = record[@"Name"];
restaurant.explanation = record[@"Explanation"];

Table *firstTable = [[Table alloc] init];
firstTable.number = record[@"FirstNumber"];

[restaurant.tables addObject:firstTable];

Table *secondTable = [[Table alloc] init];
secondTable.number = record[@"SecondNumber"];

[restaurant.tables addObject:secondTable];

set.localID = [record[@"localID"] integerValue];

RLMResults<Area *> *areas = [Area objectsWhere:@"postalCode = 90210"];
Area *area = [areas objectAtIndex:0];

[realm beginWriteTransaction];

[area.restaurants addObject:restaurant];

[realm commitWriteTransaction];
};

queryOp.queryCompletionBlock = ^(CKQueryCursor *cursor, NSError *error)
{
NSLog(@"Fetching succeeded");
success(@"test");
};

queryOp.resultsLimit = CKQueryOperationMaximumResults;
[publicDatabase addOperation:queryOp];

现在,这是对我的代码的简化,但它重现了我遇到的错误。 Realm 抛出:无法将主键属性“localID”设置为现有值“26306”。。我相信这是由于 Restaurant 已经在 RLMArray 中这一事实造成的。我可能应该检查 Restaurant 是否在数组中,如果不在,则添加它。但是我该怎么做呢?我怎样才能防止这种情况发生?

最佳答案

您可以通过调用+ [RLMObject objectForPrimaryKey:] 来检查具有指定主键的对象是否已经存在。并检查它是否不返回 nil。主键属性由 Realm 自动索引,因此这种查找执行得非常快。 :)

此外,只是为了阐明 Realm 的工作原理,这并不是检查该特定对象是否在您的 RLMArray 中;它是对象是否在 Realm 数据库本身中。因此,在您的情况下,可能需要先通过其主键查询该对象的 Realm ,如果结果不是 nil 然后检查该对象是否已经在数组。

关于ios - 在 RLMArray 上添加或更新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37424209/

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