2015-05-19 3 views
0

Я использую Realm 0.92.3, но он разбился, когда у меня есть значение null, несмотря на то, что я задал свойства по умолчанию. Есть ли какое-нибудь решение? Если нет, я могу преобразовать с помощью coredata, поскольку это очень важно для меня. Нулевая будет случайным образом по нескольким свойствамNull Value вызывает Realm Crashed

@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' 
+0

Пожалуйста, разместите stacktrace. Это не очевидно из кода, который вы опубликовали, где проблема. – trojanfoe

+0

@trojanfoe не уверен, что вы имели в виду у stacktrace, но я обновил свои вопросы с более подробной информацией. –

+0

ОК, поэтому вместо объекта 'NSString' используется объект' NSNull'. В вашем коде нет объектов 'NSNull'. Вам нужно проверить, какие объекты перед работой над ними. – trojanfoe

ответ

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]; 

}