2010-07-21 10 views
7

L'applicazione del mio iPhone si blocca occasionalmente la prima volta che viene eseguita dopo l'installazione. Dopo questo, ogni volta che provo a eseguire l'app, rimane sullo splash screen o persino su uno schermo nero finché alla fine non muore. Devo riavviare il dispositivo per far funzionare l'applicazione. Dopo questo funziona bene ogni volta. L'unica modifica tra il codice OS3 e 4 è la proprietà 'UIApplicationExitsOnSuspend' per forzare il caricamento della app ogni volta invece che la sospensione. Qualsiasi aiuto sarebbe grande.Arresto dell'applicazione iPhone (solo iOS4)

Qui ci sono i frammenti di due codici:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    taskListViewController = [[TaskListViewController alloc] initWithNibName:@"TaskListView" bundle:nil]; 
    taskListViewController.managedObjectContext = self.managedObjectContext; 

    [taskListViewController setAppDefaults]; 

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:taskListViewController]; 
    [taskListViewController release]; 

    navController.navigationBar.tintColor = [UIColor blackColor]; 

    [window addSubview:[navController view]]; 
    [window makeKeyAndVisible]; 

}

- (void)viewDidLoad 
{ 
    NSLog(@"viewDidLoad - Start"); 
    [super viewDidLoad]; 

    NSError *error = nil; 
    if(![[self fetchedResultsController] performFetch:&error]) 
    { 
    NSLog(@"Error with initial fetch %@, %@", error, [error userInfo]); 
    } 

    [activityIndicator startAnimating]; 

    self.navigationItem.leftBarButtonItem.enabled = NO; 
    self.navigationItem.rightBarButtonItem.enabled = NO; 
    infoButton.enabled = NO; 
    syncButton.enabled = NO; 

    taskListTable.userInteractionEnabled = NO; 
    taskListTable.allowsSelection = NO; 

    checkingRecovery = true; 
    [self insertCheck]; 
} 

Altri metodi di cui sopra:

[taskListViewController setAppDefaults] 
    [self insertCheck]; 

setAppDefaults - Enumera attraverso le impostazioni del pacchetto applicando le defaultValues ​​per NSUserDefaults se non sono già stati impostati dall'utente in peferences.

insertCheck - Esegue alcune query sul db per garantire l'integrità del file sulle registrazioni audio, ma in questo caso poiché è la prima volta che viene caricata l'app non farà nulla.

Aggiornamento:

Ho commentato le chiamate di metodo in più (i due di cui sopra) e sto ancora avere il problema.

Ho trovato alcune persone che hanno lo stesso tipo di problema sul forum degli sviluppatori di Apple senza soluzioni. Una risposta proveniva da un utente con lo stesso problema ma l'applicazione è stata approvata nell'app store.

Grazie Sj

+0

Si consiglia di modificare il proprio post per includere il codice per ciò che accade nei metodi 'applicationDidFinishLaunching' e' viewDidLoad'. Inoltre, assicurati di non avere 'NSLogs' con stringhe di formato dati errate (% d quando dovrebbe essere un% @ per esempio), quelle possono causare un arresto anomalo senza che vengano visualizzati messaggi di errore. – iwasrobbed

+0

Il caricamento della finestra sembra normale, direi se non è dovuto alle impostazioni predefinite dell'utente, avviare il debug attraverso il codice di controllo del database oi risultati del recupero iniziale. – iwasrobbed

risposta

0

Hai guardato i file di log?

Puoi copiarli dal tuo iPhone se lo colleghi, carichi organizer (Windows-> Organizer in XCode) e seleziona i log del dispositivo.

Se si vede un registro per il momento l'applicazione è schiantato, esso dovrebbe includere lo stack di chiamate (che dovrebbe includere la funzione che causa il crash)

In alternativa potrebbe essere che sei bloccato in un certo periodo di codice all'avvio - e se la tua applicazione non inizia in un maniero tempestivo (entro 30 secondi IIRC) iOS lo uccide.

+0

Sembra che non ci siano registri di arresti anomali relativi all'applicazione. Grazie. – Sjblack

+0

Qualcos'altro che ho notato è che disinstallare l'app e reinstallarla senza riavviare il dispositivo non risolve il problema! Grazie ancora. – Sjblack

0

Provalo senza il pezzo managedObjectContext e verifica se stai ancora andando in crash. Cosa dice il registro quando si blocca? Riceverete un'eccezione di memoria?

1

Se si esegue il debug dell'applicazione quando si blocca, è necessario ottenere una traccia di stack, che indicherà su quale riga si blocca l'applicazione.

Se fosse possibile fornire la traccia dello stack, sarebbe molto più facile trovare la causa dello schianto.

+0

Ho paura che quando si blocca non ha raggiunto il punto di ingresso della app nel codice, quindi non ottenere alcun registro di crash. Grazie - Sj – Sjblack