2013-05-23 7 views
1

У меня есть приложение, которое периодически терпит крах для клиента. Я не могу дублировать крах, но я смог получить журнал ошибок от клиента, и я надеюсь, что кто-то может указать мне в правильном направлении относительно того, на что я должен смотреть. Это в меньшинстве отчетов о сбоях, большинство других отчетов о сбоях - это события с низкой памятью. Приложение использует ARC, если это имеет значение.iOS 6.1.3 EXC_BAD_ACCESS KERN_INVALID_ADDRESS

Я новичок в этом, так что я просто должен быть в правильном направлении, желательно любезно :)

Incident Identifier: C21570BF-3E76-44DD-BEB1-03FDA4A12750 
CrashReporter Key: ebcd6d296e2badb36644f9abfdae158007ba680e 
Hardware Model:  iPad2,1 
Process:   APP_NAME [106] 
Path:   /var/mobile/Applications/F083D896-D881-4F8F-81FE-44BDA9C072EA/APP_NAME.app/APP_NAME 
Identifier:  APP_NAME 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2013-05-17 14:26:42.639 -0700 
OS Version:  iOS 6.1.3 (10B329) 
Report Version: 104 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0xc1ed2375 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 libobjc.A.dylib     0x3b46b5b0 objc_msgSend + 16 
1 UIKit       0x35566080 -[UIAlertView(Private) _performPopup:animationType:revealedBySpringBoardAlert:] + 504 
2 UIKit       0x35582f28 -[UIAlertView(Private) _repopup] + 76 
3 UIKit       0x3556cbd4 -[UIAlertView(Private) _removeAlertWindowOrShowAnOldAlert] + 192 
4 UIKit       0x3556c996 -[UIAlertView(Private) _popoutAnimationDidStop:finished:] + 590 
5 UIKit       0x35429aae -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] + 154 
6 UIKit       0x3549e8ea -[UIViewAnimationState animationDidStop:finished:] + 46 
7 QuartzCore      0x351d3bfc CA::Layer::run_animation_callbacks(void*) + 204 
8 libdispatch.dylib    0x3b8874b4 _dispatch_client_callout + 20 
9 libdispatch.dylib    0x3b88c1b8 _dispatch_main_queue_callback_4CF$VARIANT$mp + 220 
10 CoreFoundation     0x335dff36 __CFRunLoopRun + 1286 
11 CoreFoundation     0x33552eb8 CFRunLoopRunSpecific + 352 
12 CoreFoundation     0x33552d44 CFRunLoopRunInMode + 100 
13 GraphicsServices    0x371092e6 GSEventRunModal + 70 
14 UIKit       0x354682fc UIApplicationMain + 1116 
15 APP_NAME       0x000bd492 main (main.m:16) 
16 libdyld.dylib     0x3b8a7b1c start + 0 
+0

Это трудно получить от этого много, но 'objc_msgSend' в верхней части стека указывает на проблему, когда сообщение отправляется объекту, который не существует (или не понимает сообщение). Скорее всего, у вас есть что-то слабое, которое должно быть сильным или что-то, что выходит из сферы действия, когда это не должно. Может быть, ваше оповещение использует делегата ... (гадание)? –

+1

Что я вижу чаще всего для этого приложения, так это то, что у iPad заканчивается память, когда происходит многократная загрузка (20+), поэтому мне интересно, был ли этот конкретный сбой просто артефактом, из-за которого он заканчивался памяти. Это возможность? Я думаю о переносе загрузок в какую-то очередь, чтобы помочь решить эту проблему. – mitchkramez

+0

Может быть. Раньше было правдой, что система будет выгружать неиспользуемые представления, когда у вас мало памяти. Я думал, что это остановилось, но я не слишком внимательно следил за этой темой. Так или иначе, очень вероятно, что причиной фактического сбоя является объект, который уже был уничтожен. Я бы предложил использовать зомби в качестве способа исследования, но если у вас уже недостаточно памяти, которая может не работать хорошо. –

ответ

1

теперь я понимаю, что этот вопрос не был оформлен очень хорошо.

Я использовал AFNetworking для загрузки файлов на сервер. Я использовал:

NSData *videoData = [NSData dataWithContentsOfURL:[NSURL URLWithString:video.filename]]; 
NSMutableURLRequest *request = [[AppApiManager sharedManager] multipartFormRequestWithMethod:@"POST" path:@"videos/upload" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData>formData) { 
[formData appendPartWithFileData:videoData name:@"video_filename" fileName:@"ipad-video.mov" mimeType:@"video/quicktime"]; 
}]; 

Так что, в основном, я выделял память, если бы был такой большой файл видео. Решение было использовать другой способ прикрепления файла запроса вида, что потоки с диска:

-appendPartWithFileURL:name:fileName:mimeType:error: will stream data directly from the file, making memory allocation beforehand unnecessary. 

Короче говоря, я совершенно упускается из виду вся память выделяется в NSData

Смежные вопросы