我正在尝试更新Realm数据库,但无法弄明白。
我使用的是[realm addObject:info];
,但这只会将相同的对象添加到已存在的Realm数据库中。
然后我将其替换为[People createOrUpdateInRealm:realm withValue:info];
,但只添加了我的人员信息数组中的最后一项(有六个人,但Realm数据库只显示第六人信息)。
不确定我做错了什么?
People.h:
@property (nonatomic) NSString *fname;
@property (nonatomic) NSString *lname;
@property (nonatomic) NSString *flName;
@property (nonatomic) NSString *email;
@property (nonatomic) NSString *phone;
@property (nonatomic) NSString *video;
@property (nonatomic) NSString *pdf;
@property (nonatomic) NSString *pKey;
+ (NSString *)primaryKey;
People.m:
+ (NSString *)primaryKey
{
return @"pKey";
}
TableViewController.m:
RLMRealm *realm = [RLMRealm defaultRealm];
for (id item in responseArray) {
[realm beginWriteTransaction];
People *info = [[People alloc] init];
info.fname = item[@"fname"];
info.lname = item[@"lname"];
info.flName = [NSString stringWithFormat:@"%@ %@", item[@"fname"], item[@"lname"]];
info.phone = item[@"phone"];
info.video = item[@"video"];
info.pdf = item[@"pdf"];
[People createOrUpdateInRealm:realm withValue:info];
[realm commitWriteTransaction];
}
responseArray
来自API的数据。
答案 0 :(得分:2)
您没有提供 ID COST HOURS TYPE_
---------- ---------- ---------- ------
234 2 4 Input
236 3 3 Output
236 3 5 Input
345 5 4 Output
4 rows selected.
方法的定义,但我怀疑您的+primaryKey
属性是您的主要关键字。您未在自己创建的pKey
对象上设置pKey
属性,从而导致其保留默认值info
。这意味着nil
看到您要求每次循环更新同一个对象:主键为+createOrUpdateInRealm:withValue:
的对象。
在调用nil
之前在pKey
上设置info
属性会导致所有对象都按预期保存。
另请注意,最好尽量减少写入事务的数量,因为每个写入事务都有一定的开销。在这种情况下,您可以轻松地将写入事务移出循环。