0

我正在使用 Realm 0.92.3,但是当我有空值时它崩溃了,尽管我已经设置了默认属性。有什么解决方案吗?如果不是,我可能会使用 coredata 进行转换,因为这对我来说非常重要。null 在几个属性上是随机的

@interface WatchlistNews : RLMObject
@property NSString              *nid;
@property NSString              *tid;
@property NSString              *country;

@end


 @implementation WatchlistNews
 + (NSString *)primaryKey {
     return @"nid";
 }

 + (NSDictionary *)defaultPropertyValues {
     return @{@"nid" : @"", @"tid": @"", @"country": @""};
 }
 @end

数据回复:

nid = 509319;
tid = <null>;
country = my;

错误代码:

 -[NSNull UTF8String]: unrecognized selector sent to instance 0x10712b4c0 
 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull UTF8String]: unrecognized selector sent to instance 0x10712b4c0'
4

2 回答 2

0

Realm 不支持复杂的数据类型,因此如果您尝试分配复杂的值,例如<null>,它会崩溃。

您应该检查从服务器获得的响应以获取<null>值。如果它存在于响应中,则将其替换为空字符串。尝试在您得到的响应上使用以下代码,以消除<null>值的出现。

-(NSMutableDictionary *) removeNullFromDictionary:(NSDictionary *) originalDictionary{

NSArray *allKeysArray = [originalDictionary allKeys];
const NSMutableDictionary *replaced = [originalDictionary mutableCopy];
const id nul = [NSNull null];
const NSString *blank = @"";

for(NSString *key in allKeysArray) {

    const id object = [originalDictionary objectForKey:key];

    if(object == nul) {

        [replaced setObject:blank forKey:key];

    }
}
return [replaced copy];

}

于 2015-05-19T14:44:21.783 回答
0

Realm 尚不支持属性设置nilNSString但您可以通过https://github.com/realm/realm-cocoa/issues/628跟踪其进度。

于 2015-05-22T16:06:45.510 回答