2011-01-28 14 views
5

コアデータに一時プロパティーを設定する際に問題があります。私が解決しようとしている問題は次のとおりです。コアデータを使用してオブジェクトのコレクションが正常に格納されています。このコレクションは本質的には読み取り専用のコレクションですが、実行時に、別のオブジェクト(この場合はUIImage)をコレクションの各アイテムに関連付ける必要があります。私はUIImagesを格納する必要はありません。純粋に実行時の関連付けです。私が実際に必要とするのは、後でUIImageをドロップできるコレクション内の各オブジェクトに「プレースホルダ」です。コアデータと一時プロパティー

一時属性が正しいことのように思えると、このために、コアデータの参照ドキュメントは、私は私が行っているデータモデルの「未定義のタイプのオプション、一時属性」に設定する必要があることを教えてください: XCode snippet

さらに、実装オブジェクトに対応するプロパティを定義する必要はありませんが、カスタムアクセサの&セッタメソッドを記述する必要があることがわかります。次のように私は、ドキュメント内の例に基づいてこれらのメソッドをモデル化しました:

- (void)setDisplayImage:(UIImage *)anImage { 

    [self willChangeValueForKey:@"displayImage"]; 
    [self setPrimitiveValue:anImage forKey:@"displayImage"]; 
    [self didChangeValueForKey:@"displayImage"]; 
} 

と:

- (UIImage *)displayImage { 

    [self willAccessValueForKey:@"displayImage"]; 
    UIImage *anImage = [self primitiveDisplayImage]; 
    [self didAccessValueForKey:@"displayImage"]; 

    if (anImage == nil) {  
     NSData *displayImageData = [self displayImageData]; 
     if (displayImageData != nil) { 
      anImage = [NSKeyedUnarchiver unarchiveObjectWithData:displayImageData]; 
      [self setPrimitiveDisplayImage:anImage]; 
     } 
    } 
    return anImage; 
} 

私は厳しいのために書かれている繰延「書き込み」方法(willSave)もあります上記のように、私は決してこれらのオブジェクトを店に戻すことはしません。

私が得ている問題は、 - (UIImage *)displayImage {primitiveDisplayImageとsetPrimitiveDisplayImageのメソッドです。基本的に、コンパイラは、これらの2つのメソッドで "オブジェクトXが 'primitiveDisplayImage' .. 'などに応答しない可能性があるという警告をスローします。 しかし、ドキュメントからの私の理解はこれらのプリミティブアクセサ/セッターが自動的に作成されるということです。事件である。 誰でもこの問題を解決するのに役立つ人は誰ですか? 多くのありがとう

答えて

5

setPrimitive...メソッドの問題点は、実行時にNSManagedObjectが応答しますが、コンパイラはそれらが存在することを知る方法がないことです。エンティティクラスのヘッダーファイルにメソッドを宣言することで警告メッセージを表示しないようにすることができます。これにより、コンパイラは、実装で定義しなかったことを伝えません。

もう1つのオプションは、アクセスする必要のある属性ごとに[self setPrimitiveValue:value forKey:@"key"];を呼び出すことです。私は過去にこの方法を使用しましたが、ドキュメントではこれが10.5以降では推奨されていませんでした。 Managed Object Accessor Methods

基本的には::、カテゴリのヘッダファイルに@properyを宣言したカテゴリの実装ファイルに@dynamicを定義

3

は、ここに答えを見つけました。

関連する問題