2012-05-10 38 views
3

我創造了iOS 5的應用程序,我收到以下錯誤:的XCode拋出SIGABRT錯誤,每當我跑由於IBOutletCollection

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

我試圖調試錯誤,可以看到,它發生的原因我將一個項目連接到一個IBOutletCollection。

的IBOutletCollection被定義如下:

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

NSSet *Balls; 

被定義爲一個實例變量。

每當我沒有將球連接到界面構建器中的集合時,應用程序將加載正常。然而,一旦任何球被添加到集合中,那麼在ViewController和所有球被實例化並且在ViewController中的ViewDidLoad之前,我將得到一個錯誤。

它工作正常,然後我重新定位了一些圖層,現在我無法擺脫這個錯誤。

如果任何人都可以幫助甚至爲什麼會發生這種情況的建議,甚至只是一個iOS 5使用IBOutletCollection的例子(如果我在設置中做了錯誤的事情,但我認爲我沒有),那麼它將不勝感激。

感謝

+1

您是否合併了@屬性?這是什麼樣子? –

+0

嗨,肯,我是用'@synthesize球'合成的。所以不要認爲這是問題。我採取了忽略IBOutletCollection並使用從視圖中檢索項目的解決方法。對於IBOutletCollection也有困難的人,您可以使用下面的代碼片段來避免使用它 – Theo

回答

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]; 
    } 
} 

這將從視圖中檢索具體類型的所有項目,然後您可以簡單地將它們添加到集合中。這隻會獲得所有項目,如果它們直接在您正在迭代的視圖上。如果有一個子視圖也包含你想要的項目,你將不得不遞歸調用這個方法。

0

IBOutletCollections應該聲明爲NSArray,您將它作爲NSSet。它應該寫爲:

@property (strong, nonatomic) IBOutletCollection(BallButton) NSArray *Balls;