2

在我手机上直接从 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];
4

2 回答 2

3

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

没有为 保存强引用request,因此将其释放。

ARC 推出新的终身资格赛

  • __weak指定不使被引用对象保持活动状态的引用。当对象没有强引用时,弱引用设置为 nil。

__block 存储类型

__block变量存在于变量的词法范围和在变量的词法范围内声明或创建的所有块和块副本之间共享的存储中。因此,如果在帧内声明的块的任何副本在帧结束后仍然存在(例如,通过在某处排队以供以后执行),则存储将在堆栈帧的破坏中幸存下来。给定词法范围内的多个块可以同时使用一个共享变量。


更新

明确我的建议是替换:

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

和:

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

这不应导致保留周期。

于 2013-04-23T15:51:21.433 回答
0

通常存档具有与在模拟器中运行更常见的调试配置不同的构建配置。确保您以两种方式测试相同的配置。每个版本之间可能有所不同。

我们使用调试、临时和发布构建配置。后两者用于归档。ad-hoc 可以直接从 Xcode 构建和运行,因此来自该配置的存档应该是相同的。

于 2013-04-23T17:25:03.517 回答