int retVal = UIApplicationMain(argc, argv, nil, nil); EXC_BAD_ACCESS при попытке загрузить pdf в webView

Я сохраняю PDF-файл из Интернета локально, а затем загружаю его в папку webView. В iOS 4.0 и 4.1 выдает ошибку BAD_ACCESS, а в iOS 4.2 и 4.3 все работает нормально.

Это код, который я использую:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"press.pdf"]; 

filePath = [[NSURL fileURLWithPath:path]retain];
NSError *err =nil;
if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { //if file already exists delete it
    NSLog(@"file is already there !");
    [[NSFileManager defaultManager] removeItemAtPath:path error:&err];
    NSLog(@"error: %@",err);
}
[responseData writeToURL:filePath atomically:YES];
[responseData release];

if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {
    NSLog(@"file is  there");
    NSData *pdfFile = [[NSData alloc]initWithContentsOfFile:path ];
    [webView loadData:pdfFile MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
    [pdfFile release];
}
else{
    NSLog(@"file not there");
}

Я пытался включить NSAutoreleaseFreedObjectCheckEnabled, NSZombieEnabled и NSDebugEnabled, но в консоли ничего не получаю. Xcode просто останавливается на этой строке:

int retVal = UIApplicationMain(argc, argv, nil, nil); 

и заявляет EXC_BAD_ACCESS

Я понятия не имею, что это может быть и где искать дальше.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что если я прокомментирую следующую строку, она, очевидно, не сработает, потому что в webView ничего не загружено.

[webView loadData:pdfFile MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

person BObereder    schedule 30.06.2011    source источник
comment
Что такое responseData и где вы [[alloc]init] это делаете?   -  person akashivskyy    schedule 30.06.2011
comment
NSMutableData *responseData — это место, где мой NSURLConnection сохраняет данные из pdf. Я делаю [[alloc]init] в viewDidLoad   -  person BObereder    schedule 30.06.2011


Ответы (2)


Попробуйте для начала закомментировать все операторы release... если сбой исчезнет, ​​начните сужать, какой из них вызывает проблему. Кроме того: вам действительно следует изучить авторелиз, потому что во многих случаях вы без необходимости сохраняете код выше.

Если это не сработает, попробуйте по крупицам комментировать фрагменты кода, чтобы выяснить, где он действительно взрывается (очевидно, НЕ там, где показывает XCode).

person Dan Rosenstark    schedule 30.06.2011
comment
отредактировал мой пост выше, на самом деле сделал все, что вы упомянули, до сих пор не может найти проблему. и не могли бы вы сказать мне, где я сохраняю без необходимости? Я новичок в Objective C. спасибо - person BObereder; 30.06.2011
comment
Эта строка [NSURL fileURLWithPath:path] не нуждается в сохранении, потому что она уже является автоматически выпущенным объектом. См. vgable.com/blog/2010/05/19/n-a-r-c и поищите narc в stackoverflow. - person Dan Rosenstark; 30.06.2011
comment
если эта строка закомментирована: [webView loadData:pdfFile MIMEType:@application/pdf textEncodingName:@utf-8 baseURL:nil]; он больше не вылетает - person BObereder; 30.06.2011
comment
@bllubbor, так что, если вы удалите сохранение сразу после строки сбоя, это не решит проблему? - person Dan Rosenstark; 30.06.2011
comment
@Yar Думаю, я не понимаю, о чем ты говоришь. которые сохраняются после линии сбоя, которую вы имеете в виду? - person BObereder; 30.06.2011
comment
@bllubbor Извините, я получил этот комментарий задом наперед :)... Я просто имею в виду, что вы должны закомментировать все операторы release, особенно начиная с `[pdfFile release];` Также: возможно, сам webView был освобожден. , как вы сохраняете это? - person Dan Rosenstark; 30.06.2011
comment
@Yar, комментирующий [выпуск pdfFile], уже ничего не пробовал. и webView выпускается в методе Dealloc этого viewController, так что это тоже не может быть. Я очень ценю вашу помощь - person BObereder; 30.06.2011
comment
@Yar, давайте продолжим это обсуждение в чате - person BObereder; 30.06.2011
comment
@bllubbor скучал по тебе в чате. Пожалуйста, попробуйте закомментировать строку webView loadData и заменить ее на NSLog(@"test %@", webView); и посмотреть, не взрывается ли она. Если это так, то сам webView был освобожден. - person Dan Rosenstark; 30.06.2011
comment
@Yar сделал то, что вы сказали, и попробовал это в новом проекте. работает как шарм, даже тот же точный код, поэтому ошибка должна быть где-то еще! теперь я довольно облажался, но спасибо за вашу помощь! Я отмечу ваш ответ как правильный, даже если он не помог мне с моей проблемой, но я думаю, это именно тот способ, которым вы должны отлаживать! еще раз спасибо - person BObereder; 30.06.2011
comment
@bllubbor, подозревай сам проект или перья. Когда вы создаете каждую вещь с нуля, вы увидите, появляется ли ошибка на каждом шаге, или (надеюсь) заметите какое-то несоответствие. Однако, как мы оба заметили, поскольку эта штука работает в версии 4.2, вы, вероятно, не найдете никаких различий в коде. Удачи! - person Dan Rosenstark; 30.06.2011

У меня была такая же проблема, и это как-то связано с автокоррекцией в симуляторе.

Симулятор > Настройки > Общие > Клавиатура > Автозамена = Выкл.

person Vaibhav Garg    schedule 28.10.2011