当存根块时OCMock EXC_BAD_ACCESS

时间:2014-12-10 11:57:58

标签: objective-c exc-bad-access ocmock

我正在尝试使用OCMock的andDo和块,但每次尝试时,我都会得到EXC_BAD_ACCESS。下面是NSNotificationCenter的示例,但我使用块获得了与其他对象相同的结果。

我错过了什么?

[[[notificationCenterMock stub] andDo:^(NSInvocation *invocation) {

        void (^block)(NSNotification *note);
        [invocation getArgument:&block atIndex:2];

        NSNotification *notification = [NSNotification notificationWithName:UIApplicationDidEnterBackgroundNotification object:nil];

        block(notification); //EXC_BAD_ACCESS when calling this line

    }] addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil queue:[OCMArg any] usingBlock:[OCMArg any]];

2 个答案:

答案 0 :(得分:1)

如果没有深入研究,并且没有看到更多代码,我认为您可能必须在__unsafe_unretained变量上使用block。有关详细信息,请参阅此处:EXC_BAD_ACCESS when accessing parameters in andDo of OCMock

答案 1 :(得分:0)

尝试告诉调用保留其参数:

[[[notificationCenterMock stub] andDo:^(NSInvocation *invocation) {
    [invocation retainArguments];

    void (^block)(NSNotification *note);
    [invocation getArgument:&block atIndex:2];
    // …