gpt4 book ai didi

ios - 如何在另一个 block 内执行 block (无不良访问)

转载 作者:行者123 更新时间:2023-11-29 12:58:33 25 4
gpt4 key购买 nike

我的一个方法 (mySecondMethod) 接收到一个 block ,需要在将它作为参数传递给另一个方法之前对该 block 添加额外的处理。这是代码示例:

- (void)myFirstMethod {
// some code
__weak MyController *weakSelf = self;
[self mySecondMethod:^(BOOL finished) {
[weakSelf doSomething:weakSelf.model.example];
}];
}

- (void)mySecondMethod:(void(^)(BOOL finished))completion {
void (^modifiedCompletion)(BOOL) = ^void(BOOL finished){
completion(finished);
_messageView.hidden = YES; //my new line
};
[UIView animateWithDuration:duration animations:^{
//my code
} completion:modifiedCompletion];
}

运行时,我在 completion(finished) 行遇到错误访问。 完成 为 NULL。我试着像这样复制 block :

void (^copiedCompletion)(BOOL) = [completion copy];
void (^modifiedCompletion)(BOOL) = ^void(BOOL finished){
copiedCompletion(finished);
_messageView.hidden = YES; // my new line
};

但还是报错。

当我清空完成 block 时,崩溃仍然发生,所以崩溃不是由于内部的原因。

知道如何解决这个问题吗?谢谢!

最佳答案

我认为您因此获得了错误的访问权限

// some code
__weak MyController *weakSelf = self;
[self mySecondMethod:^(BOOL finished) {
[weakSelf doSomtehing:weakSelf.model.example];
}];

尝试将其更改为。

id example = self.model.example;
[self mySecondMethod:^(BOOL finished) {
[self doSomething:example];
}];

编辑

block 在调用前需要复制。

旁注

在调用 block 之前进行检查以避免意外崩溃。

if (completion) {
completion(finished);
}

关于ios - 如何在另一个 block 内执行 block (无不良访问),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com