gpt4 book ai didi

ios - 延迟在后台获取 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-28 21:50:26 27 4
gpt4 key购买 nike

我正在创建一个在后台模式(最小化)下工作的应用程序,它每 90 秒执行一次特定的方法来检查服务器上的某些信息。代码是这样的:

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
...
}

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

MyFristViewController *viewController = (MyFristViewController *)self.window.rootViewController;

[viewController checkData:^(UIBackgroundFetchResult result) {
completionHandler(result);
}];

}

MyFristViewController.m

-(void)checkData:(void (^)(UIBackgroundFetchResult))completionHandler{
...
NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

if(error == nil){
completionHandler(UIBackgroundFetchResultNewData);

}else{
completionHandler(UIBackgroundFetchResultNoData);
}
}];

[dataTask resume];

[self performSelector:@selector(checkData:) withObject:nil afterDelay:90.0];
...
}

我的代码运行良好,但正如我之前所说,命令必须每 90 秒运行几次,为此,方法的结尾使用了这个首选命令:

[self performSelector:@selector(checkData:) withObject:nil afterDelay:90.0];

此代码中的问题是它第一次运行完美,现在当他期望 90 秒并第二次运行相同的代码时,我收到错误消息 EXEC_BAD_ACCESS 这行代码:

completionHandler(UIBackgroundFetchResultNewData);

现在,如果我删除这行代码,我会收到消息并且我的应用程序运行良好(没有任何崩溃):

Application delegate received call to -application:performFetchWithCompletionHandler: but the completion handler was never called.

我认为收到此消息并不好,简而言之,我想做的是在应用程序最小化时永远每 90 秒运行一次此命令。我的做法是否正确?

最佳答案

你不可能永远在后台运行,iOS 不提供这种能力。

当前的崩溃是因为您多次调用完成处理程序并且在它已失效之后。

基本上,您应该改变您的方法,或许还有您的要求,并使用 Apple 规定的后台处理(因此基于用户使用情况而不是明确的时间段)。

关于ios - 延迟在后台获取 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551679/

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