在相同类型的块中包装块

时间:2012-07-19 00:53:48

标签: objective-c objective-c-blocks

我有一系列物品。沿链的对象存在以很好地划分功能。一个完成块被传递到链上,我想如果另一个对象想要将东西添加到完成块,我可以将完成块包装在一个相同类型的块中,调用第一个块,一切都是aces。我得到了EXC_BAD_ACCESS。我的语法错了还是我完全以错误的方式接近这个?

-(void)archiveChatWithDictionary:(NSDictionary*)dictionary andCompletionBlock:(ServerConnectionCompletionBlock)completionBlock
{
    ServerConnectionCompletionBlock localCompletionBlock = ^(ServerConnection *connection, NSError *error) {

        // Do some stuff
        // ...

        //  This line produces EXC_BAD_ACCESS
        completionBlock(connection, error);
    };    

    [self.chatEndpointInterface archiveChatWithDictionary: dictionary andCompletionBlock: localCompletionBlock];
}

2 个答案:

答案 0 :(得分:3)

最后,是复制了completionBlock(还是在复制的块中内联)?

默认情况下,块存储在堆栈中。如果你想保持一个块(通常是一个完成块),你必须复制它(所以它移动到堆)。

好处是,如果复制一个块,所有嵌套块也将被复制。

答案 1 :(得分:0)

我正在做同样的事情并且它工作得很好。

我确实遇到了这次崩溃,结果发现包裹的块是零。也许你可以检查一下。

我建议断言块不是nil或在块调用之前放置if语句,具体取决于您的具体情况。

相关问题