我究竟如何更新Realm中的对象?似乎无法找到编辑/更新对象的任何内容。有任何想法吗?感谢
答案 0 :(得分:4)
您可以使用RLMRealm类中的以下API:
– addOrUpdateObject:
– addOrUpdateObjectsFromArray:
https://realm.io/docs/objc/latest/api/Classes/RLMRealm.html#//api/name/addOrUpdateObject: https://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。
希望这有帮助。如果答案标记为答案错误,请更正。
这是一种原始方法,我相信它可以做得更好。
欢呼声