我正在为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之前得到错误。
工作正常然后我重新定位了一些图层,现在我无法摆脱这个错误。
如果有人可以帮助甚至建议为什么会发生这种情况,或者甚至只是iOS 5使用IBOutletCollection的例子(如果我在设置中做错了,但我认为我没有)那么它会非常感谢。
谢谢
答案 0 :(得分:0)
您可以获取包含集合中所需项目的视图,并使用IBOutlet连接它,而不是使用IBOutletCollection。然后使用:
- (NSSet *)getBallsFromView:(UIView *)view
{
NSMutableSet *balls = [[NSMutableSet alloc] init];
for (UIView *subview in [view subviews])
{
if ([subview isKindOfClass:[BallButton class]])
[balls addObject:(BallButton *)subview];
}
}
这将从视图中检索特定类型的所有项目,然后您只需将它们添加到集合中即可。这只会获取所有项目,如果它们直接位于您正在迭代的视图上。如果子视图中还包含您想要的项目,则必须递归调用此方法。
答案 1 :(得分:0)
IBOutletCollections应声明为NSArray,您将其作为NSSet。它应该写成:
@property (strong, nonatomic) IBOutletCollection(BallButton) NSArray *Balls;