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 回答