1

タイプ NSData の「image」プロパティで定義された Realm クラスがあります。+defaultPropertyValues メソッドの NSDictionary 戻り値で「image」のデフォルト値を次のように設定しました。

@"image":[NSNull null]. これは、画像の値が設定されていないことを示します。

ただし、Realm オブジェクトを保存すると、次のエラーでプログラムがクラッシュします。

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

Realm オブジェクトの NSData プロパティに nil 値が許可されていないかどうか教えてください。もしそうなら、空の NSData プロパティを表す別の方法はありますか?

nil 以外の 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 にできるプロパティは 1 種類だけで、それが RLMObject プロパティです。オプション (nullable) プロパティは優先度の高いものですが、当面は次の 2 つの回避策のいずれかをお勧めします。

  1. NSData (例) を唯一のプロパティとする RLMObject サブクラスを定義します。これは nullable です。
  2. NSData が nil かどうかを追跡する別のブール プロパティを追加します。

ここでもっと読む:

realm.ioでnull値を処理するには?

于 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 に答える