更新Realm数据库

时间:2016-07-25 16:35:20

标签: objective-c realm

我正在尝试更新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的数据。

1 个答案:

答案 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属性会导致所有对象都按预期保存。

另请注意,最好尽量减少写入事务的数量,因为每个写入事务都有一定的开销。在这种情况下,您可以轻松地将写入事务移出循环。