gpt4 book ai didi

ios - block 中的 objective-c block

转载 作者:行者123 更新时间:2023-11-28 18:58:32 24 4
gpt4 key购买 nike

这里有很多积木!

我正在尝试使用 block 对字典中存在的每条记录执行操作。

我创建了 strongRecordBlock 的弱引用,并使用它在 strongRecordBlock 中调用自身。在我介绍我需要执行的实际操作 (DataManager addRecord) 之前,一切都很好,而这又是一个 block 。所以现在有一个异常(exception),weakRecordBlock 在递归循环的第一次迭代后为 null。谁能指导一下!

__weak __block void (^weakRecordBlock)(int i);

void (^strongRecordBlock)(int) = ^(int i) {
NSString *key = weakSelf.recordDictionary.allKeys[i];
CSVRecord *record = [weakSelf.recordDictionary objectForKey:key];
NSLog(@"%d %@", i, record.recordFullname);
[[DataManager sharedInstance] addRecord:record onSuccess:^(NSString *objectId) {
if (i < weakSelf.recordDictionary.allKeys.count-1) {
weakRecordBlock(i+1);//Crashes here
}
else {
completedBlock();
}
} onError:^(NSError *error) {
onError(error);
}];


};
weakRecordBlock = strongRecordBlock;
strongRecordBlock(0);

最佳答案

问题是您正试图在 block 内使用弱指针。并且它导致在第一次运行循环之后实现弱点。

因此需要在strongRecordBlock 内部创建对weakRecordBlock 的强引用。因此,只需将这行代码添加到您的 strongRecordBlock 之上即可

 void (^strongPointerToWeakRecordBlock)(int i) = weakRecordBlock;

并将 weakRecordBlock(i+1) 替换为 strongPointerToWeakRecordBlock(i+1)

关于ios - block 中的 objective-c block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28924116/

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