2010-09-16 2 views
0

Mon application fonctionne correctement dans le simulateur, mais lorsqu'elle s'exécute sur le périphérique, elle se termine par SIGABRT. Je l'ai réduit au code suivant:NSMutableArray - L'application s'exécute dans le simulateur mais pas sur le périphérique

- (void)loadImage { 
int imageNumber = currentImageNumber; 
// check to see if the image has already been downloaded. 
// if not, get it and add it to an array 
if ([imageData count] < totalNumberOfImages && (imageNumber + 1) > [imageData count]) { 
    NSString *urlString = [[mainMenuItem.imageDetails objectAtIndex: imageNumber] objectForKey: @"url"]; 
    NSURL *url = [NSURL URLWithString: urlString]; 
    NSData *data = [NSData dataWithContentsOfURL: url]; 
    UIImage *image = [UIImage imageWithData: data]; 
    [imageData addObject: image]; 
} 

// set the image from the array 
self.imageOnScreen = [imageData objectAtIndex: imageNumber]; 

}

Il est le [imageData addObject: image]; un message qui génère l'accident, avec la sortie de la console suivante:

2010-09-17 00:03:03.005 PilotsMate[17426:5e03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0' 
*** Call stack at first throw: 
(
    0 CoreFoundation      0x313f4fd3 __exceptionPreprocess + 114 
    1 libobjc.A.dylib      0x3302f8a5 objc_exception_throw + 24 
    2 CoreFoundation      0x31377f99 -[__NSArrayM insertObject:atIndex:] + 472 
    3 CoreFoundation      0x31377da7 -[__NSArrayM addObject:] + 34 
    4 PilotsMate       0x00007c5d -[WeatherDetailViewController loadImage] + 300 
    5 PilotsMate       0x00007eb1 -[WeatherDetailViewController displayPicture:] + 232 
    6 Foundation       0x33265c9d -[NSThread main] + 44 
    7 Foundation       0x332ea9e1 __NSThread__main__ + 972 
    8 libSystem.B.dylib     0x3527598d _pthread_start + 248 
    9 libSystem.B.dylib     0x3526b0ec thread_assign_default + 4294967295 
) 
terminate called after throwing an instance of 'NSException' 
[Switching to thread 11523] 
[Switching to thread 11523] 
Program received signal: “SIGABRT”. 
kill 

Quelle est la cause cela, car il n'y a aucun problème dans le simulateur? Je suis très perplexe et apprécierais votre contribution. Tout ce que je fais est d'initialiser un NSMutableArray dans viewDidLoad, puis d'ajouter un objet au tableau. Si je nettoie les cibles, il n'y a aucun changement à ce qui se passe. Bizarre, car cette partie de l'application fonctionnait bien il y a quelques jours et je n'ai pas modifié ce fichier d'implémentation (et je n'ai pas encore mis à jour le tout dernier iOS 4.1, donc il n'y a pas de changement dans la version OS ou Xcode) .

Répondre

3

Le message d'erreur que vous avez collé dit tout:

[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0 

L'objet image est nil. Pourquoi est-ce nil? Définissez un point d'arrêt dans Xcode tout en l'exécutant dans le simulateur et déterminez quelle ligne au-dessus dans le coupable.

+0

Oui, c'est logique. J'ai mal lu ce que cela a dit car j'ai eu un problème en essayant accidentellement d'interroger un tableau nul l'autre jour. Je reçois l'erreur suivante: PilotsMate (17524,0x3e9097c8) malloc: zone purgeable ne prend pas en charge les pages de garde 2010-09-17 00: 27: 11.768 PilotsMate [17524: 5f03] Erreur Domaine = NSCocoaErrorDomain Code = 256 "L'opération couldn Ne pas être complété (erreur Cocoa 256.) "UserInfo = 0x19fe00 {NSURL = http: //image.weather.com/images/sat/uksat_600x405.jpg} –

+0

Si vous voyez la réponse de Jon Rodriguez, il est probablement sur la bonne voie . Je pense que 256 est une erreur de réseau. Le simulateur ne peut probablement pas accéder à l'URL pour une raison quelconque. Avez-vous un pare-feu ou un proxy configuré sur votre machine? Pouvez-vous accéder à cette URL à partir de Safari sur la même machine exécutant Xcode? –

+0

Voilà pourquoi je sais maintenant quelle est l'erreur. Il fonctionne bien dans le simulateur, mais l'iPhone provoque le problème lors de l'exécution de l'appareil. Il est connecté au même routeur sans fil que le macbook. Je peux accéder à l'image du macbook safari, mais pas à partir de l'iPhone que j'ai découvert. Pourquoi cela serait-il? –

0

Pour approfondir la réponse de Shaggy Frog, je pense que la raison la plus probable pour que l'image soit nulle est s'il y a un problème de lecture de l'URL. Essayez d'utiliser dataWithContentsOfURL:options:error: et en vérifiant l'erreur sortie pour voir ce qui s'est passé.

Questions connexes