在Realm中更新对象

时间:2015-03-19 17:25:14

标签: ios realm

我究竟如何更新Realm中的对象?似乎无法找到编辑/更新对象的任何内容。有任何想法吗?感谢

4 个答案:

答案 0 :(得分:4)

您可以使用RLMRealm类中的以下API:

– addOrUpdateObject:
– addOrUpdateObjectsFromArray:

https://realm.io/docs/objc/latest/api/Classes/RLMRealm.html#//api/name/addOrUpdateObjecthttps://realm.io/docs/objc/latest/api/Classes/RLMRealm.html#//api/name/addOrUpdateObjectsFromArray

要更新Realm中的对象,需要在RLMObject子类中定义一些主键,以便Realm知道要更新的内容。

+ (NSString *) primaryKey
{
    return @"somePropertyNameAsString";
}

答案 1 :(得分:4)

这是the documentation on updating objects in Realm

这是另一个更新对象的选项,而不是其他答案中讨论的对象。

很多时候,当我想更新对象时,我只需要更新一个或两个属性,一个关于Realm的烦人的事情是持久化对象的属性更改需要包装在写入事务中,所以我通常在我的对象中添加一个包装器方法来清理界面:

@implementation SomeRealmClass

    - (void)update:(void (^)(SomeRealmClass *instance))updateBlock
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
            RLMRealm *realm = [RLMRealm defaultRealm];
            [realm beginWriteTransaction];
            updateBlock(self);
            [realm commitWriteTransaction];

        });
    }

@end

这样,我可以像这样更新一个对象:

SomeRealmClass *instance = [[SomeRealmClass allObjects] objectAtIndex:0];

[instance update:^(SomeRealmClass *instance) {
    instance.foo = @"foo 2";
    instance.bar = @"bar 2";
}];

答案 2 :(得分:2)

在Realm中,每当从数据库中检索对象时,您都可以更新其属性,这些更改将反映在数据库中。

答案 3 :(得分:-1)

这是我写的一个更新数据库的方法,它有一个名为CDlevels的表。

您可以从任何线程调用此方法,因为它将从该线程分配领域并完成所需。

-(void)updateLevel:(int)levelNo WithScore:(NSString*)strScore complete:(void (^)(BOOL))completed{

RLMRealm *realm = [RLMRealm defaultRealm];

NSPredicate *pred = [NSPredicate predicateWithFormat:@"levelNo = %d",levelNo];

RLMResults *RLMLevels = [CDLevels objectsWithPredicate:pred];

CDLevels *myLevel = [[CDLevels alloc]init];

myLevel = [RLMLevels objectAtIndex:0];

[realm beginWriteTransaction];
myLevel.score = strScore;
[realm commitWriteTransaction];

completed(YES);

}

这就是你可以调用这个方法的方法,比如说用100分来更新1级

[self updateLevel:1 WithScore:@"100" complete:^(BOOL completed) {

        if (completed) {
             NSLog(@"score updated");
        }

    }];

我尝过这种味道很酷。我正在尝试将我的一个coredata应用程序更改为Realm。

希望这有帮助。如果答案标记为答案错误,请更正。

这是一种原始方法,我相信它可以做得更好。

欢呼声