3

iOS 5 用のアプリを作成していますが、次のエラーが表示されます。

Assertion failure in -[UIRuntimeOutletCollectionConnection performConnect], /SourceCache/UIKit_Sim/UIKit-1912.3/UIRuntimeOutletCollectionConnection.m:43

エラーのデバッグを試みたところ、アイテムを IBOutletCollection に接続したためにエラーが発生したことがわかりました。

IBOutletCollection は次のように定義されています。

@property (strong) IBOutletCollection(BallButton) NSSet *Balls;

NSSet *Balls;

インスタンス変数として定義されています。

インターフェイス ビルダーで Ball をコレクションに接続していないときはいつでも、アプリは正常に読み込まれます。ただし、いずれかのボールがコレクションに追加されるとすぐに、ViewController とすべてのボールがインスタンス化された後、ViewController の ViewDidLoad の前にエラーが発生します。

正常に動作していましたが、いくつかのレイヤーの位置を変更しましたが、このエラーを取り除くことができません。

なぜこれが起こっているのか、または IBOutletCollection を使用する iOS 5 の例 (セットアップで何か間違ったことをした場合に備えて、しかし私は間違っているとは思わない) の提案さえ誰かが手伝ってくれるなら、それは大歓迎です。 .

ありがとう

4

2 に答える 2

0

IBOutletCollection を使用する代わりに、コレクションに必要なすべての項目を含むビューを取得し、IBOutlet を使用して接続できます。次に使用します。

- (NSSet *)getBallsFromView:(UIView *)view
{
    NSMutableSet *balls = [[NSMutableSet alloc] init];
    for (UIView *subview in [view subviews]) 
    {
        if ([subview isKindOfClass:[BallButton class]])
            [balls addObject:(BallButton *)subview];
    }
}

これにより、ビューから特定のタイプのすべてのアイテムが取得され、コレクションに簡単に追加できます。これは、反復しているビューに直接ある場合にのみ、すべてのアイテムを取得します。必要なアイテムも含むサブビューがある場合は、このメソッドを再帰的に呼び出す必要があります。

于 2012-05-13T18:39:46.987 に答える
0

IBOutletCollections は NSArray として宣言する必要があり、NSSet として持っています。次のように記述します。

@property (strong, nonatomic) IBOutletCollection(BallButton) NSArray *Balls;
于 2016-08-02T16:59:13.547 に答える