gpt4 book ai didi

ios - 递归调用 block 时的 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-29 02:35:48 24 4
gpt4 key购买 nike

我正在使用新的 iOS Spotify SDK。我需要为我的应用程序获取用户保存的所有轨道。结果是分页的。因此,我尝试递归地使用 requestNextPageWithSession: callback: 直到我获取了所有页面。

首先,我提出了保存轨道的初始请求。这会成功返回第一页,所以如果还有其他页面,我会调用 getNextPage()

__block SPTListPage *allPages;
[SPTRequest savedTracksForUserInSession:session callback:^(NSError *error, SPTListPage *firstPage) {
if (!error) {
allPages = firstPage;
if (firstPage.hasNextPage) {
getNextPage(firstPage);
}
else {
// All tracks were in the first page
}
}
}];

getNextPage() 被声明为上面的一个 block ,像这样:

Block getNextPage;
getNextPage = ^(SPTListPage *page) {
[page requestNextPageWithSession:session callback:^(NSError *error, SPTListPage *nextPage) {
if (!error) {
[allPages pageByAppendingPage:nextPage];
if (nextPage.hasNextPage) {
getNextPage(nextPage);
}
else {
// Got all pages
}
}
}];
};

仅供引用 - 我已将“阻止”定义为在全局范围内使用:

typedef void (^Block)();

问题是我第一次尝试在 block 中递归使用 getNextPage() 时,它在该行上因 EXC_BAD_ACCESS 而崩溃。堆栈跟踪没有帮助,但看起来 getNextPage 已发布。希望有人解决了类似的问题。

最佳答案

你必须保存对你的 block 的引用,否则当执行到达范围末尾时它会被清理掉。您可以在您的类上创建一个属性来保存它。

@property (nonatomic, copy) Block block;

或者,您可以只使用方法。

- (void)fetchNextPage:(SPTListPage *)page {
[page requestNextPageWithSession:session callback:^(NSError *error, SPTListPage *nextPage) {
if (!error) {
[allPages pageByAppendingPage:nextPage];
if (nextPage.hasNextPage) {
[self fetchNextPage:nextPage];
}
else {
// Got all pages
}
}
}];
}

关于ios - 递归调用 block 时的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391527/

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