gpt4 book ai didi

ios - Realm : How to delete object from RLMArray?

转载 作者:行者123 更新时间:2023-12-01 18:06:35 27 4
gpt4 key购买 nike

我在 iOS Realm DB 中创建了简单的关系数据库(如存在于其他数据库中)模型。我创建了 2 个单独的 Realm 模型(表)用户 ID 以及其他详细信息和一个愿望 list ,其中用户使用 RLMArray 拥有一个愿望 list 数组.愿望 list 可以包含 1 个或多个产品,如 my previous question .在这个模型表中,用户 ID 是不变的,但愿望 list 表是 RLMArray可以更新或删除。我可以更新 RLMArray使用 Realm addOrUpdateObject 但是如何从 RLMArray 中删除元素?
示例关系数据库模型如下:

enter image description here

代码与此类似:

#import <Realm/Realm.h>

@class User;

// User model
@interface User : RLMObject
@property NSString *name;
@property NSString *user_id;
@property RLMArray< Wishlist *>< Wishlist > *wishlist;
@end

// Wishlist model
@interface Wishlist : RLMObject
@property NSString *id;
@property NSInteger *activity;
@property NSInteger *cost;

@end
RLM_ARRAY_TYPE(Wishlist) // define RLMArray<Person>

// Implementations
@implementation User
@end // none needed

@implementation Wishlist
@end // none needed

从 Realm 读取数据:
RLMResults *watchlistDB = [Watchlist allObjects];
WatchlistDB = [realm_data objectAtIndex:index];
RLMArray *realm_array = WatchlistDB.watchlist;

插入新事件:
User *user_realm = [[MyWatchlistDB alloc] init];
user_realm.user_id = _user_id;
user_realm.name = _user_name;
for (NSDictionary *tempDict in activity)
{
Wishlist *wishlist_realm = [[Wishlist alloc] init];
newWatchlist.id =[tempDict objectForKey:@"id"];
newWatchlist.activity =[tempDict objectForKey:@"activity"];
newWatchlist.cost = [tempDict objectForKey:@"cost"];

[user_realm.wishlist addObject:newWatchlist];
}
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
[realm addOrUpdateObject:user_realm];
[realm commitWriteTransaction];

如何从 RLMArray 中删除元素?当他删除一些事件时更新用户愿望 list ?

最佳答案

Realm 是一个对象数据库,而不是关系数据库,因此您不需要实现外键系统来链接对象。如果你想看哪个User一个 WishList项目所属,您可以使用RLMLinkingObject功能以提供反向查找而不是您现在正在做的事情。

// Wishlist model
@interface Wishlist : RLMObject
@property NSInteger *activity;
@property NSInteger *cost;
@property (readonly) RLMLinkingObjects *users;
@end
RLM_ARRAY_TYPE(Wishlist) // define RLMArray<Person>

// Implementations
@implementation Wishlist
+ (NSDictionary *)linkingObjectsProperties {
return @{
@"users": [RLMPropertyDescriptor descriptorWithClass:User.class
propertyName:@"wishlist"]
};
}
@end

这意味着您可以调用 wishlist.users.firstObject获取 Wishlist 所在的用户属于,无需做大量的手动链接工作。

此外,如果您在 User 中有一个 Realm 属性。如果您想用来唯一标识对象,您可以显式地将其标记为主键,以便您查询特定对象(即使我们为了方便起见称它为主键,它仍然与关系数据库不同)。
// User model
@interface User : RLMObject
@property NSString *name;
@property NSString *user_id;
@property RLMArray< Wishlist *>< Wishlist > *wishlist;
@end

@implementation User
+ (NSString *)primaryKey {
return @"user_id";
}
@end
UserWishlist对象存储在 Realm 中的单独表中,两者都没有明确地拥有彼此(它们只是进行引用)。如果一个 Wishlist项目只有一个 User , 那么你可以删除 Wishlist来自 Realm 的对象,它将从 RLMArray 中删除也是。

要删除属于单个用户的所有愿望 list 条目,您可以简单地执行此操作。
//Get John Smith's entry
User *johnSmith = [User objectForPrimaryKey:@"084"];

//Delete all of the items in John's wishlist
RLMRealm *realm = [RLMRealm defaultRealm]

[realm transactionWithBlock:^{
[realm deleteObjects:johnSmith.wishlist];
}];

关于ios - Realm : How to delete object from RLMArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42153334/

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