自定义NSOperation中的随机崩溃

时间:2011-03-21 16:28:28

标签: iphone objective-c ios ios4 key-value-observing

在ipad应用上使用iOS 4.3

我有一个自定义的NSOperation,它使用http请求来处理在NSOperationQueue中使用操作的xml片段。在大多数情况下,应用程序运行正常但是,特别是在设备上测试应用程序崩溃时,这总是在主线程的后台/单独线程上。我已将此表现为各种错误,包括臭名昭着的

warning: check_safe_call: could not restore current frame

我已经削减了我的代码并发现我操作中的start方法似乎是罪魁祸首。

-(void)start
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    self.handledElements = [NSArray arrayWithObjects:@"el1", @"el2", @"el3", nil];


    if (![NSThread isMainThread])
        {
        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
        return;
    }

        // problem is here !!
    [self willChangeValueForKey:@"isExecuting"];
    _isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];

    context = xmlCreatePushParserCtxt(&simpleSAXHandlerStruct, self, NULL, 0, NULL);

    if(_urlIsRelative == YES){
        self.request = [[MyHttpRequest alloc] initWithRelativeUrl:self.url andDelegate:self];
    }
    else {
        self.request = [[MyHttpRequest alloc] initWithAbsoluteUrl:self.url andDelegate:self];
    }

    self.characterBuffer = [[NSMutableData alloc] init];
    [self.request startRequest];



    [pool drain];
 }

违规行似乎是willChangeValueForKey:@“isExecuting”如果我删除与KVO相关的行我根本无法让应用程序崩溃,如果我将它们添加回来我会得到随机错误,似乎总是指向获得关键值遵守计数。虽然我的应用程序有效,但我宁愿按预期编写start方法,KVO通知会由我处理,任何想法?

2 个答案:

答案 0 :(得分:1)

  

我有一个观察的单身人士课程   每次操作的输出 - 马特38   分钟前

....对于isExecuting更改通知(观察),该单例是完全并发安全的吗?

答案 1 :(得分:0)

这似乎是libxml的一个问题,我已经更新了我的版本,问题现在已经消失......