我正在尝试使用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]];
答案 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];
// …