2011-12-15 10 views
1

相対的な初心者の質問。私のアプリはNSNumbersの単純なNSMutableArrayを持っています。 (約1ダースの整数)私は、ユーザーが配列に何が入っているかを知るためにUIに数字を表示するビューを持っていたいと思います。ビューの内容を最新のものにしたいので、配列(またはその内容)にバインドしたいと思う。これを行う簡単な方法はありますか?Xcode、OS X:単純なNSMutableArrayを表示

NSMutableArrayにsetterとgetterを宣言されたプロパティ(NSTableViewバインディングのLucas 'YouTubtorialに従う)を持つカスタムクラスが含まれるようにモデルを変更すると、これがわかりますが、 NSNumbersの配列を使用できるようにする簡単な方法です。 NSMutableArrayをやり直さなければならない場合、かなりの量の編集が必要です。ありがとう...

答えて

1

モデルでプレーンな古いNSNumbers(または他のもの)を使用できます。カスタムモデルクラスを使用する必要はありません。ただし、モデルデータにビュー用の特別な書式が必要な場合は、NSValueTransformerサブクラスを作成することができます。

NIBには、NSTableViewとNSArrayControllerがあります。

TableView列のValueプロパティをNSArrayController、controllerキー= arrangedObjectsにバインドします。モデルキーパスは空です(NSNumberインスタンス自体を表示しているため、NSNumberのプロパティではないため)。

NSArrayControllerのコンテンツ配列プロパティをモデル(NSNutableのNSMutableArray)にバインドします。これは、おそらくView ControllerまたはApp Delegateのプロパティです。

それはそれです。また、ボタンをNSArrayControllerのadd:remove:アクションにフックアップすると、配列に項目を追加したり削除したりすることができます。

また、NSMutableArrayが変更されるたびにKVO通知を送信する必要があります。たとえば、あなたのNSMutableArrayのが「数字」というプロパティを介して公開されると言う:

[self willChangeValueForKey:@"numbers"]; 
[_numbers addObject:[NSNumber numberWithInt:123]]; 
[self didChangeValueForKey:@"numbers"]; 

あなたが新しい値に「番号」プロパティを設定する場合は、無料でこれらの通知を得る:

self.numbers = [NSMutableArray arrayWithObject:foo]; 
+1

あなたは」また、適切な名前の変更可能アクセサメソッドを実装して使用する場合は、これらの通知を無料で取得します。詳細はこちら:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/AccessorConventions.html。要するに、実装する: ' - (NSUInteger)countOfNumbers; - (NSNumber *)objectInNumbersAtIndex:(NSUInteger)index; - (void)insertObject:(NSNumber *)aNumber inNumbersAtIndex:(NSUInteger)index; - (void)removeObjectFromNumbersAtIndex:(NSUInteger)index; - (void)replaceObjectInNumbersAtIndex:(NSUInteger)withObject:(NSNumber *)aNumber' –

+0

実装*と*を使用します。単にそれらを実装しても、配列と直接話したり、KVO通知を受け取ることはできません。あなたは通知を引き起こすためにそれらのアクセサーメッセージを自分自身に送る必要があります(あるいは 'will' /' didChangeValueForKey: 'のすべてをラップする必要があります)。 –

関連する問題