【发布时间】:2016-02-22 06:35:53
【问题描述】:
我有一个来自后端的对象
dummyObj{ name, number, image and id }
我在我的 RLMObject 模型上添加了另一个名为 isFav 的布尔属性。我在我的模型上调用了方法primaryKey,并将id设置为主键。
问题是每次我更新我的对象时,isFav 属性都会被替换为 0,并且它的旧值不会保持不变。
我之前在另一个应用程序中实际使用过这个场景,它运行良好,唯一的例外是我使用的是旧的领域版本。
目前我使用的确切方法是:
DummyObj *testObj = [DummyObj mj_objectWithKeyValues:jsonDic];
[DummyObj createOrUpdateInDefaultRealmWithValue:testObj];
mj_objectWithKeyValues 是用于 json 模型映射的 MJExtension 库。
我也试过[realm addOrUpdateObject: testObj];
我还在我的模型上实现了 defaultPropertyValues 方法,并为 isFav 属性设置了默认值,后来我将其全部删除,但对象仍然被替换而不是更新为相同的 id。
并来自文档
请注意,在更新对象时,
NSNull仍被视为可选属性的有效值。如果您提供带有NSNull属性值的字典,那么这些值将应用于您的对象并且这些属性将被清空。为确保您不会遇到任何意外的数据丢失,请确保在使用此方法时仅提供您希望更新的属性。
但实际上我只提供了我希望更新的属性,但它会更新 isFav 属性。
dummyObj 的确切类是
#import <Foundation/Foundation.h>
#import <Realm/Realm.h>
#import "Tags.h"
#import "BusinessCategory.h"
#import <MJExtension/MJExtension.h>
RLM_ARRAY_TYPE(Tags)
RLM_ARRAY_TYPE(BusinessCategory)
@interface HotlineNumber : RLMObject
@property NSString *hotlineName;
@property NSString *hotlineNumber;
@property NSString *hotlineImage;
@property NSInteger hotlineID;
@property BOOL isFav;
@property RLMArray<BusinessCategory> *categories;
@property RLMArray<Tags> *hotlineTags;
@end
我的实现文件是:
#import "HotlineNumber.h"
@implementation HotlineNumber
//
//+ (NSDictionary *) defaultPropertyValues{
//
// NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
// dict[@"isFav"] = @NO;
//
// return dict;
//}
+ (NSString *) primaryKey {
return @"hotlineID";
}
+ (NSDictionary *) mj_objectClassInArray{
return @{
@"categories" : @"BusinessCategory",
@"hotlineTags": @"Tags"
};
}
@end
我的jsonDict如下
{
"hotlineID": 241,
"hotlineName": "Abaza Auto Trade",
"hotlineNumber": "16876",
"hotlineImage": "",
"categories": [
{
"catId": 92,
"catName": "Automotive",
"catIcon": "",
"catColor": "#03a9f4",
"catOrder": "",
"isParent": "false"
}
],
"hotlineTags": [ ]
}
【问题讨论】:
-
您能否分享您的
DummyObj类的声明,以及您传递给+ mj_objectWithKeyValues:的jsonDic的确切内容? -
@bdash 我已经添加了确切的内容。 :)
标签: objective-c realm