0

相互に関連付けられたUIViewオブジェクトのコレクションを保持するNSArrayがいくつかあります(NSArrayはsoundView0、soundView1、soundView2、soundView3です)。配列内のUIViewを有効化/無効化するBOOLプロパティを配列全体に関連付けられるようにしたい。

これを達成するための最もクリーンで最も適切な方法は何ですか?

4

2 に答える 2

6

サブクラス化NSArrayは難しい場合があり、追加のプロパティだけが必要な場合は、カテゴリとランタイム関数を使用して別のオプションを利用できます。プロパティを追加するカテゴリをNSArray記述し、関連付けられたオブジェクトを使用してプロパティのストレージを提供します。このコードで十分です。アプリの命名規則に従って名前を変更するだけです。

@interface NSArray (MyExtensions)

@property (nonatomic) BOOL myProperty

@end

@implementation NSArray (MyExtensions)

static char MyPropertyKey;

- (void)setMyProperty:(BOOL)myProperty
{
    objc_setAssociatedObject(self, &MyPropertyKey, @(myProperty), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (BOOL)myProperty
{
    NSNumber *propertyNumber = objc_getAssociatedObject(self, &MyPropertyKey);
    return [propertyNumber boolValue];
}

@end
于 2012-09-23T06:27:50.320 に答える
-1

NSArray の独自のサブクラスを記述してから、そのサブクラスに BOOL プロパティをアタッチできます

于 2012-09-22T17:36:33.293 に答える