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) .
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} –
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? –
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? –