2010-07-26 6 views
0

J'ai un tableau:iPhone SDK: Copie tableau

//current array 
NSMutableArray *arrayCurrentArray; 

// et l'indice indexCurrentPage = 1;

le tableau doit être initialisé à l'exécution comme ceci:

  arrayCurrentArray = 
[[NSMutableArray alloc] 
initWithArray:arrayBrotherPirateEnglish 
copyItems:YES]; 

voici comment le tableau est initialisé:

arrayBrotherPirateEnglish = [NSArray arrayWithObjects:@"OBTP English full with text", @"OBTP English p1", @"OBTP English p2", @"OBTP English p3", @"OBTP English p4", @"OBTP English p5", @"OBTP English p6",
@"OBTP English p7", @"OBTP English p8", @"OBTP English p9", @"OBTP English p10",
@"OBTP English p11",
nil];

Je puis le code comme ceci:

indexCurrentPage++; 

if(indexCurrentPage <= [arrayCurrentArray count]) { 
    //next page to play    
    strFileName = [arrayCurrentArray objectAtIndex:indexCurrentPage]; 
    NSLog(@"next page filename %s ", strFileName); 
    //set the player 
    NSURL *url = [NSURL URLWithString:strFileName]; 
    [player setContentURL:url]; 
    //play 
    [player play];  
} 

Mon problème est que je ne peux pas accéder aux éléments de la matrice.

C'est l'erreur que je reçois:

2010-07-26 12:57:18.888 BookReaderJuly23[49638:207] next page filename ‡ûú» 
2010-07-26 12:57:18.890 BookReaderJuly23[49638:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter' 
2010-07-26 12:57:18.892 BookReaderJuly23[49638:207] Stack: (

Toute idée appréciée.

Répondre

0

Cette ligne:

NSLog(@"next page filename %s ", strFileName); 

est incorrect. strFileName est un NSString; vous devez utiliser le spécificateur de format "% @" (au lieu de "% s" pour l'imprimer)

3

Votre tableau contient des objets NSString, pas des "chaînes" de style C. Vous devez utiliser le spécificateur de format "% @" au lieu de « % s » pour les connecter:

NSLog(@"next page filename %@", strFileName); 

Vous ne montrez pas comment strFileName est déclarée, mais il devrait ressembler à ceci:

NSString *strFileName; 

Vous avez également un arrêt par un erreur, car NSArrays utilise l'indexation 0. Démarrez votre index à 0 et votre condition de boucle doit être:

if(indexCurrentPage < [arrayCurrentArray count]) 

plutôt que

if(indexCurrentPage <= [arrayCurrentArray count]) 

Ensuite, si vous voulez créer une URL de fichier, utilisez la méthode de classe correcte (+ fileURLWithPath :):

NSURL *url = [NSURL fileURLWithPath:strFileName]; 

Ce sont les problèmes évidents et devrait vous aider à faire des progrès. Vous pouvez également inclure les premières images de votre trace de pile la prochaine fois car elle contient probablement de bonnes informations.

+0

Ceci est l'erreur: 2010-07- 26 13:43:47.154 BookReaderJuly23 [50904: 207] *** Terminaison de l'application due à l'exception non interceptée 'NSInvalidArgumentException', raison: '*** - [NSCFString objectAtIndex:]: sélecteur non reconnu envoyé à l'instance 0x5533de0' Ceci est le code précédent: strFileName = [arrayBrotherPirateEnglish objectAtIndex: 2]; \t \t \t \t NSLog (@ "page suivante filename% @", strFichier); – butchcowboy

+0

Cela signifie que vous envoyez le message objectAtIndex: à un objet NSString plutôt qu'à un NSArray. Cela peut signifier que vous avez réaffecté votre variable NSArray à un NSString, ou que vous avez un problème de gestion de la mémoire (libérer votre tableau trop tôt, etc.). L'exécution de l'outil Zombies peut vous aider à résoudre un problème de mémoire. mais il semble que vous ayez des problèmes avec certains principes de base, alors vous voudrez peut-être que quelqu'un plus expérimenté regarde votre programme entier pour vous aider à trouver des erreurs courantes. –

0

Vérifiez la documentation sur NSURL pour la méthode que vous utilisez.

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/Reference/Reference.html#//apple_ref/doc/uid/20000301-BAJBBDIB

Mise au point sur cette partie The string with which to initialize the NSURL object. Must conform to RFC 2396. This method parses URLString according to RFCs 1738 and 1808.

Sur la base de ce que vous avez ici, il semble que vous ne sont pas conformes à la RFC 2396