我正在为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示例(如果我在设置中做错了,但我认为我没有做过),那么将不胜感激。

谢谢

最佳答案

代替使用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];
    }
}


这将从视图中检索特定类型的所有项目,然后您可以简单地将它们添加到集合中。仅当所有项目直接在您要遍历的视图上时,才会获取所有项目。如果子视图中还包含您想要的项目,则必须递归调用此方法。

10-06 10:51