Xcode 7 GM - 无法调用enumerateObjectsUsingBlock

时间:2015-09-12 15:47:19

标签: objective-c xcode call block ios9

我刚刚下载了xcode 7 GM并尝试使用iOS 9调用NSArray的方法enumerateObjectsUsingBlock,但它在构建时显示以下错误。

Incompatible block pointer types sending 'void (^)(SKSpriteNode *__strong, NSUInteger, BOOL *)' to parameter of type 'void (^ _Nonnull)(SKNode * _Nonnull __strong, NSUInteger, BOOL * _Nonnull)'

这是关于enumerateObjectsUsingBlock方法的Apple文档:

- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj,
                                             NSUInteger idx,
                                             BOOL *stop))block

这是我的代码:

[self.children enumerateObjectsUsingBlock:^(SKSpriteNode * child, NSUInteger idx, BOOL *stop) {
    child.position = CGPointMake(child.position.x-self.scrollingSpeed, child.position.y);
    if (child.position.x <= -child.size.width){
        float delta = child.position.x+child.size.width;
        child.position = CGPointMake(child.size.width*(self.children.count-1)+delta, child.position.y);
    }
}];

其中self.children是NSArray。

我不明白,我做错了什么?

1 个答案:

答案 0 :(得分:1)

您是否阅读了错误消息?你有没有注意到两个地方的“非空虚”?在Xcode 7中,有更严格的规则。你有一个数组,保证包含SKNode,而不是SKSpriteNode。有一些指针需要是非空指针。您需要更改代码才能处理此问题。