作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 iOS Realm DB 中创建了简单的关系数据库(如存在于其他数据库中)模型。我创建了 2 个单独的 Realm 模型(表)用户 ID 以及其他详细信息和一个愿望 list ,其中用户使用 RLMArray
拥有一个愿望 list 数组.愿望 list 可以包含 1 个或多个产品,如 my previous question .在这个模型表中,用户 ID 是不变的,但愿望 list 表是 RLMArray
可以更新或删除。我可以更新 RLMArray
使用 Realm addOrUpdateObject
但是如何从 RLMArray
中删除元素?
示例关系数据库模型如下:
代码与此类似:
#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
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];
最佳答案
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
User
和
Wishlist
对象存储在 Realm 中的单独表中,两者都没有明确地拥有彼此(它们只是进行引用)。如果一个
Wishlist
项目只有一个
User
, 那么你可以删除
Wishlist
来自 Realm 的对象,它将从
RLMArray
中删除也是。
//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/
我是一名优秀的程序员,十分优秀!