1

我有一个使用 NSData 类型的“图像”属性定义的领域类。我已将 +defaultPropertyValues 方法的 NSDictionary 返回值中“图像”的默认值设置为

@"image":[NSNull null]. 这表示没有设置图像值。

但是,保存 Realm 对象时程序会崩溃,并出现以下错误:

[NSNull UTF8String]: unrecognized selector sent to instance 0x10abe9ce0

您能否告知 Realm 对象中的 NSData 属性是否允许 nil 值。如果是这样,是否有不同的方式来表示空的 NSData 属性。

设置非零 NSData 值时,该问题不存在。

先感谢您

更新:代码:

Item.h
@interface UploadImage : RLMObject
  @property uploadImage:NSData
@end

Item.m
+ (NSDictionary *)defaultPropertyValues
{
  return @{@"uploadImage":[NSNull null]...};
}

当 uploadImage 设置为 nil 或从 NSDictionary 获取默认值时会发生错误。我使用的解决方法是使用创建一个 0 字节的 NSData["" dataUsingEncoding:NSUTF8StringEncoding]

4

2 回答 2

3

目前只有一种属性可以为 nil/NULL,那就是 RLMObject 属性。可选(可为空)属性具有高优先级,但目前我们推荐以下两种解决方法之一:

  1. 定义一个以 NSData(例如)作为其唯一属性的 RLMObject 子类。然后这是可以为空的。
  2. 添加一个单独的布尔属性,用于跟踪 NSData 是否为 nil。

在这里阅读更多:

如何处理 realm.io 中的空值?

于 2014-11-17T09:09:16.710 回答
1

您可以初始化 NSData 属性并检查长度是否为 0:

let data = NSData()
if data.length == 0 {
  println("handle like nil value")
} else {
  println("Do what you want")
}
于 2015-07-21T02:21:33.650 回答