2015-04-19 2 views
-1

J'ai un NSString qui pointe vers une URL, quelque chose comme ceci:Substring Objective-C avec la gamme

https://.../uploads/video/video_file/115/spin_37.mp4 

Je veux obtenir le nom de fichier dans mon application iOS de la NSString (dans cet exemple, spin_37. mp4)

J'essaie les suivantes:

NSUInteger *startIndex = [self.videoURL rangeOfString:@"/" options:NSBackwardsSearch].location+1; 
NSUInteger *endIndex = [self.videoURL length] - startIndex; 

NSString *fileName = [self.videoURL substringWithRange:(startIndex, endIndex)]; 

Mais je suis en cours d'exécution dans beaucoup d'erreurs avec NSUInteger, à savoir en ce moment

Invalid operands to binary expression ('unsigned long' and 'NSUInteger *' (aka 'unsigned long *')) 

Quelqu'un peut-il expliquer ce que je fais mal?

+0

Que pensez-vous de clares: 'NSUInteger * startIndex' ??? –

Répondre

5

Vous pouvez toujours utiliser NSString's lastPathComponent API qui prendrait un NSString avec "https://.../uploads/video/video_file/115/spin_37.mp4" et vous renvoie "spin_37.mp4".

+0

C'est exactement ce dont j'avais besoin - merci! J'accepterai la réponse dans 10 minutes quand je peux. – scientiffic

0

Vous devez utiliser la méthode de lastPathComponent NSString:

NSString *pathString = @"https://.../uploads/video/video_file/115/spin_37.mp4"; 
NSString *fileName = [pathString lastPathComponent]; 
NSLog(@"fileName: %@", fileName); 

Sortie de la console:

2015-04-19 17:04:25.992 MapTest[43165:952142] fileName: spin_37.mp4 
(lldb) 
1

Michael vous a déjà donné une bonne méthode pour obtenir ce que vous souhaitez faire. Cependant, pour ce qui est de votre question, il y a certaines choses que vous faites qui vous empêchent de compiler le code que vous avez écrit. Tout d'abord, vous déclarez des pointeurs incorrects aux objets NSUInteger; ni NSRange.location (première ligne) ni -length (deuxième ligne) renvoie un pointeur, donc vos deux premières lignes doivent être déclarées NSUInteger s. Deuxièmement, votre deuxième ligne devrait calculer la longueur de la sous-chaîne, pas l'index de fin (car c'est ce qu'un NSRange exige.) Enfin, votre dernière ligne tente de passer deux valeurs entières au lieu d'un NSRange, ce qui est la méthode -substringWithRange: . accepte comme argument pour compiler, votre code doit donc lire:

NSUInteger startIndex = [self.videoURL rangeOfString:@"/" 
    options:NSBackwardsSearch].location+1; 
NSUInteger length = [self.videoURL length] - startIndex - 1; 

NSString *fileName = [self.videoURL substringWithRange:NSMakeRange(startIndex, length)]; 

Cependant, en utilisant la méthode de -lastPathComponentNSString comme Michael a déjà suggéré donne sans doute une solution plus propre au problème que dans cette situation, vous ne semblez pas pour avoir besoin du contrôle plus fin que NSRange s donne

+0

merci pour l'explication claire! – scientiffic