コアデータイメージは、nstableviewイメージセルにロードされません
-
30-09-2019 - |
質問
私のコードでは、コアデータモデルに画像を保存しています(正常に動作します)。 nsimageViewがあるようにビューを設定し、そのデータをコントローラーキーにバインドすると、選択とmodelkeypath:myimagepathが機能します。選択した行の各画像が表示されます。
次に、nstableViewに新しい列を作成し、画像セルを列にドラッグします。ただし、コアデータバインディングをセルに画像を表示するようにすることはできません。私は価値とデータの両方を拘束しようとしましたが、運はありませんでした。
画像が適切に保存されていると確信しているので、テーブルセルに画像が表示されないように、バインディングで何が間違っていますか?
本当にありがとう。
(私の背景:最近Hillegassの本全体を通過した新しいCocoa開発者。)
解決
あなたの問題を引き起こすことが何が起こっているのかわかりませんが、簡単に見つける方法があります。 nsvalueTransformerをバインディングに接続します。その変圧器では、物をログにしてnil値を渡すかどうかを確認するか、データ値をnsimageに変換してそれを渡すことができます。コアデータモデルの画像データで使用するものは次のとおりです。
@interface DataToImageTransformer : NSValueTransformer {
}
@end
@implementation DataToImageTransformer
+ (Class)transformedValueClass {
return [NSImage class];
} // the class of the return value from transformedValue:
+ (BOOL)allowsReverseTransformation {
return YES;
} // if YES then must also have reverseTransformedValue:
- (id)transformedValue:(id)value {
if (value == nil || [value length] < 1) return nil;
NSImage* i = nil;
if ([value isKindOfClass:[NSData class]]) {
i = [NSKeyedUnarchiver unarchiveObjectWithData:value];
}
return i;
}
- (id)reverseTransformedValue:(id)value {
if (value == nil) return nil;
NSData* d = nil;
if ([value isKindOfClass:[NSImage class]]) {
d = [NSKeyedArchiver archivedDataWithRootObject:value];
}
return d;
}
@end
AppControllerクラスでは、トランスを初期化します。
+ (void)initialize {
DataToImageTransformer *transformer = [[DataToImageTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"DataToImageTransformer"];
[transformer release];
}
次に、インターフェイスビルダーで「datatoimagetransformer」をバインディングのために入れます。これで、あなたはバインディングを制御でき、トランスクラスの前半で説明したように実行できます。 nskeyedarchiverを使用してnsimageをデータに変換して再度戻しますが、その場所で必要な他の方法を使用できることに注意してください。
他のヒント
Xcode 6で提案された手法に誰かが問題を抱えている場合、ドキュメントベースのアプリを使用してSwiftプロジェクトを作成しました。 ImageWell Control(NSIMAGEVIEW)を使用すると、バインディングは変圧器を必要とせずに直接動作します。しかし、詳細は、その下のImageCell Objetではなく、ビュー自体のデータバインディングをバインディングします。