Приложение iPad работает на большинстве устройств, на некоторых - EXC_CRASH (SIGABRT) - PullRequest
0 голосов
/ 31 августа 2010

Я создал эту удивительную игру для iPad - чистую и веселую, и людям, которым удается играть в нее не раз, нравится это.Однако в некоторых случаях он не запускается во второй раз.

Я не могу отладить его, поскольку он отлично работает на моем iPad, симуляторе и на всех iPad моих друзей.Один клиент сказал мне, что он работает на 32 ГБ, а не на 64 ГБ iPad - может ли это быть?

Любая помощь будет оценена - это снижает мои оценки (и, к сожалению, по уважительной причине)

Хотелось бы выдать промо-код всем, кто хочет разобраться в этом.

Спасибо !!Hanaan

Из My AppDelegate, если помогает:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     {    

self.playerName = [[NSUserDefaults standardUserDefaults] objectForKey:@"player_name"];
if(self.playerName == nil){
    self.playerName = @"nono";

    self.pref_currentPuzzleNumberHintsString = @"";
    self.pref_currentPuzzleFinishedSolutionString = @"";
    self.pref_currentPlayerMarksString = @"";
    self.pref_marksCompleteString = @"";
    self.pref_currentPuzzleId = -1;

    self.pref_gameInProgress = NO;
    self.pref_soundOn = YES;
    self.pref_buttonsOnLeft = NO;
    self.pref_gameTimerValue = 0;
    self.pref_gameSize = 0;

    NSNumber *pref_gameInProgress_temp = [NSNumber numberWithInt:0];
    NSNumber *pref_soundOn_temp = [NSNumber numberWithInt:1];
    NSNumber *pref_buttonsOnLeft_temp = [NSNumber numberWithInt:0];
    NSNumber *pref_gameNumber_temp = [NSNumber numberWithInt:self.pref_currentPuzzleId];
    NSNumber *pref_gameSize_temp = [NSNumber numberWithInt:self.pref_gameSize];
    NSNumber *pref_gameTimer_temp = [NSNumber numberWithInt:self.pref_gameTimerValue];


    NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 

    [standardUserDefaults setObject:self.pref_currentPuzzleFinishedSolutionString forKey:@"game_string"];
    [standardUserDefaults setObject:self.pref_currentPuzzleNumberHintsString forKey:@"hint_string"];
    [standardUserDefaults setObject:self.pref_currentPlayerMarksString forKey:@"solution_string"];
    [standardUserDefaults setObject:self.pref_marksCompleteString forKey:@"marks_complete_string"];

    [standardUserDefaults setObject:pref_gameNumber_temp forKey:@"game_id"];
    [standardUserDefaults setObject:pref_gameSize_temp forKey:@"game_size"];
    [standardUserDefaults setObject:pref_gameTimer_temp forKey:@"game_timer_value"];

    [standardUserDefaults setObject:pref_gameInProgress_temp forKey:@"game_in_progress"];
    [standardUserDefaults setObject:pref_soundOn_temp forKey:@"sound_on"];
    [standardUserDefaults setObject:pref_buttonsOnLeft_temp forKey:@"buttons_on_left"];

    [standardUserDefaults setObject:self.playerName forKey:@"player_name"];

    [[NSUserDefaults standardUserDefaults] synchronize];

    [pref_gameInProgress_temp release];
    [pref_gameSize_temp release];
    [pref_soundOn_temp release];
    [pref_gameTimer_temp release];
    [pref_gameNumber_temp release];
    [pref_buttonsOnLeft_temp release];

}else {
    self.pref_currentPlayerMarksString = [[NSUserDefaults standardUserDefaults] objectForKey:@"game_string"];
    self.pref_currentPuzzleNumberHintsString = [[NSUserDefaults standardUserDefaults] objectForKey:@"hint_string"];
    self.pref_currentPuzzleFinishedSolutionString = [[NSUserDefaults standardUserDefaults] objectForKey:@"solution_string"];
    self.pref_marksCompleteString = [[NSUserDefaults standardUserDefaults] objectForKey:@"marks_complete_string"];

    self.pref_currentPuzzleId = [[[NSUserDefaults standardUserDefaults] objectForKey:@"game_id"]intValue];

    self.pref_gameSize = [[[NSUserDefaults standardUserDefaults] objectForKey:@"game_size"]intValue];
    self.pref_gameTimerValue = [[[NSUserDefaults standardUserDefaults] objectForKey:@"game_timer_value"]intValue];

    int pref_gameInProgress_temp = [[[NSUserDefaults standardUserDefaults] objectForKey:@"game_in_progress"]intValue];
    self.pref_gameInProgress = (pref_gameInProgress_temp == 1);

    int pref_soundOn_temp = [[[NSUserDefaults standardUserDefaults] objectForKey:@"sound_on"]intValue];
    self.pref_soundOn = (pref_soundOn_temp == 1);

    int pref_buttonsOnLeft_temp = [[[NSUserDefaults standardUserDefaults] objectForKey:@"buttons_on_left"]intValue];
    self.pref_buttonsOnLeft = (pref_buttonsOnLeft_temp == 1);
    //NSLog(@"Saved game: %@",self.pref_currentPlayerMarksString);
}   


// Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[window makeKeyAndVisible];

return YES;
}

Журнал, который я получил от клиента, имеет следующее:

-

Incident Identifier: 1581089C-C02A-4155-9493-9E42B9AAB37D
CrashReporter Key:   a913e5f82c7112b47b354f04909239bff1b39000
Hardware Model:      iPad1,1
Process:         Nonograms [193]
Path:            /var/mobile/Applications/4F03245E-CFB8-4181-B881-859FDAEE18C7/Nonograms.app/Nonograms
Identifier:      Nonograms
Version:         ??? (???)
Code Type:       ARM (Native)
Parent Process:  launchd [1]

Date/Time:       2010-08-21 16:31:11.002 +0200
OS Version:      iPhone OS 3.2.2 (7B500)
Report Version:  104

SYMBOLIZED:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 Crashed:
0   libSystem.B.dylib               0x000790a0 __kill + 8
1   libSystem.B.dylib               0x00079090 kill + 4
2   libSystem.B.dylib               0x00079082 raise + 10
3   libSystem.B.dylib               0x0008d20a abort + 50
4   libstdc++.6.dylib               0x00044a1c __gnu_cxx::__verbose_terminate_handler() + 376
5   libobjc.A.dylib                 0x000057c4 _objc_terminate + 104
6   libstdc++.6.dylib               0x00042dee __cxxabiv1::__terminate(void (*)()) + 46
7   libstdc++.6.dylib               0x00042e42 std::terminate() + 10
8   libstdc++.6.dylib               0x00042f12 __cxa_throw + 78
9   libobjc.A.dylib                 0x000046a4 objc_exception_throw + 64
10  CoreFoundation                  0x00094174 -[NSObject doesNotRecognizeSelector:] + 108
11  CoreFoundation                  0x00093afa ___forwarding___ + 482
12  CoreFoundation                  0x000306c8 _CF_forwarding_prep_0 + 40
13  Nonograms                       0x00003238 0x1000 + 8760
14  UIKit                           0x00003e58 -[UIApplication _performInitializationWithURL:payload:] + 336
15  UIKit                           0x00003b22 -[UIApplication _runWithURL:payload:launchOrientation:] + 394
16  UIKit                           0x0004f8c4 -[UIApplication handleEvent:withNewEvent:] + 1336
17  UIKit                           0x0004f242 -[UIApplication sendEvent:] + 38
18  UIKit                           0x0004ec8c _UIApplicationHandleEvent + 4772
19  GraphicsServices                0x00003b2c PurpleEventCallback + 660
20  CoreFoundation                  0x00022d96 CFRunLoopRunSpecific + 2214
21  CoreFoundation                  0x000224da CFRunLoopRunInMode + 42
22  UIKit                           0x0000340a -[UIApplication _run] + 342
23  UIKit                           0x00001954 UIApplicationMain + 636
24  Nonograms                       0x00002538 0x1000 + 5432
25  Nonograms                       0x00002508 0x1000 + 5384

Ответы [ 4 ]

1 голос
/ 05 сентября 2010

Проблема заключалась в освобождении неизвестных объектов ...

[pref_gameInProgress_temp release];
[pref_gameSize_temp release];
[pref_soundOn_temp release];
[pref_gameTimer_temp release];
[pref_gameNumber_temp release];
[pref_buttonsOnLeft_temp release];
1 голос
/ 31 августа 2010

Вам нужно найти строку кода, которую представляет кадр 13 вашей трассировки стека.

Я надеюсь, что вы использовали функцию «Сборка и архивирование» последних версий XCode. В этом случае все, что вам нужно сделать, это перетащить журнал сбоя в Xcode Organizer. Это «символизирует» журнал сбоев, а это означает, что он преобразует адреса в классы и методы.

Как только вы узнаете строку, которая вызвала ошибку, (надеюсь) будет относительно просто выяснить, что пошло не так. Я предполагаю, что повреждение памяти какого-то описания - значение, которое вы предполагали сохранить при первом запуске, отсутствует или что-то в этом роде.

1 голос
/ 01 сентября 2010

Я думаю, что ваш объект или элемент пользовательского интерфейса освобождается (освобождается), но вы ожидаете, что он все еще существует:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/51235-crash-log-help.html

0 голосов
/ 31 августа 2010

Я не знаю специфики разработки iPad и obj-c. Однако это выглядит как повреждение памяти и / или висячие указатели в некотором роде.

Например, вы могли бы модифицировать массив за его пределами. Дважды проверьте все свои циклы и добавьте отладочные утверждения, которые проверяют границы.

Другая возможность состоит в том, что вы можете использовать указатели на объекты, которые были удалены, и написание / интерпретация этой памяти имеет неопределенные эффекты. Обычно это просто сбой.

Или у вас могут быть неинициализированные указатели.

Все это попадает в категорию, которую я люблю называть «Безумие разработки приложений на C / C ++ / и т. Д.». Неконтролируемые границы буфера, ручное освобождение памяти и неохраняемая память стека вызовов - просто безумные идеи для разработки современных приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...