iOS 应用程序代理不同后存档

标签: Xcode ios
发布时间: 2017/3/23 1:02:30
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

直从 xcode 我的手机上运行应用程序时一切背道而驰的伟大。 后存档,并运行它作为归档应用程序行为和并不像预期的那样。这是一部分 asihttprequest 永远不会结束从存档运行时。 我乐意帮忙。

id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];

[tracker sendEventWithCategory:@"uiAction"
                    withAction:@"station pressed"
                     withLabel:@"Station number"
                     withValue:num];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://server.com/servlet?stationId=%d",    [num intValue]]];

__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
NSLog(@"0");

[request setCompletionBlock:^{
    @try {
        NSLog(@"1");
        StopParser *stop = [[StopParser alloc]init];
                    NSLog(@"2");
        timesArray = [stop getStationsListfromString:[request responseString]];
                    NSLog(@"3");
        [stView.downlodingLabel setHidden:YES];
        [stView.downloadingIndicator setHidden:YES];
        [stView.tableview reloadData];
        [stView.tableview setHidden:NO];


    }
    @catch (NSException *exception) {
                    NSLog(@"4");
        [stView.downloadingIndicator setHidden:YES];
        [stView.downlodingLabel setHidden:NO];
        [stView.downlodingLabel setText:@"נא לנסות מאוחר יותר"];
        [stView.tableview setHidden:YES];

    }
    @finally {
        [refreshControl endRefreshing];
    }

}];
[request setFailedBlock:^{
                NSLog(@"5");
    [stView.downloadingIndicator setHidden:YES];
    [stView.downlodingLabel setHidden:NO];
    [stView.downlodingLabel setText:@"נא לנסות מאוחר יותר"];
    [stView.tableview setHidden:YES];
    [refreshControl endRefreshing];

}];
[request startAsynchronous];

解决方法 1:

我认为 __weak 是你的问题。使用 __block 相反。

没有强的引用保存为 request ,所以它被释放。

ARC介绍新一生限定符

  • __weak指定不保持被引用的对象的引用。时有没有对该对象的强引用,弱引用设置为零。

__Block 存储类型

__block变量住在词法范围的变量的词法范围内创建或声明的变量和所有的块和块副本之间共享的存储。因此,存储会幸存下来的堆栈帧的破坏,如果块在帧内声明的任何副本生存的框架末尾之外 (例如,通过正在某个地方供以后执行入队)。在给定的词法范围的多个块可以同时使用一个共享的变量。


更新

要弄清楚我的建议是要替换︰

__weak ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

与︰

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

这不应该导致保留周期。

官方微信
官方QQ群
31647020