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