2012-01-19 5 views
0

Я пытаюсь создать массив из компонентов пути к файлу. У меня есть массив путей к файлам (как NSStrings) и я перекручивание через них, а затем ломать каждый вниз, как так:Objective-C: Создание NSArray из NSString

//get the array of image paths 
imageList = [[notification userInfo] objectForKey:@"images"]; 

//loop through the array and get the image names 
for (NSString* thisImagePath in imageList) { 
    NSArray* thisImagePathArray = [thisImagePath componentsSeparatedByString:@"/"]; 

Половину времени моя программа врезаться здесь. Появляется следующее сообщение об ошибке:

-[NSCFArray componentsSeparatedByString:]: unrecognized selector sent to instance 0x1a7940 

imageList - это массив файлов, упавших на представление. Поскольку эта проблема возникла, я просто отбрасываю только один файл за раз. Например:

Этот файл не работает:

/Users/steve/Desktop/thinkstock/PT121211_PI_bariatric.tif 

Это сделал

/Users/steve/Desktop/thinkstock/Studentexhausted82557038.jpg 

так, если я понимаю, сообщение об ошибке правильно, я пытаюсь применить селектор componentsSeparatedByString к NSArray, который не поддерживает этот селектор. Но в моем цикле я призываю NSString, если объект был массивом, я не должен рушиться там? (И я на 99% уверен, что объект с индексом 0 из imageList является строкой.)

Моя цель - получить имя файла из пути к файлу, есть ли лучший способ сделать это, чем подход, который я принимаю ?

Когда я пошагово (поставив точку отладки в componentsSeparatedByString линии это, кажется, работает, как я планировал:

enter image description here

Но если я ударил продолжать это врезается

Как предположил я изменился. мой код для регистрации данных:

//loop through the array and get the image names 
for (NSString* thisImagePath in imageList) { 
if (![thisImagePath isKindOfClass:[NSString class]]) { 
    NSLog(@"The class of this object is: %@", [thisImagePath className]); 
} 
NSLog(@"%@", thisImagePath); 

NSArray* thisImagePathArray = [thisImagePath componentsSeparatedByString:@"/"]; 
NSString* thisImageName = [thisImagePathArray objectAtIndex:[thisImagePathArray count]-1]; 

Условное условие для проверки класса никогда не запускается, поскольку все из N Класс SString. Однако некоторые файлы работают, некоторые из них не ...

2012-01-19 13:59:04.631 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/rbrb_0556.jpg 
2012-01-19 13:59:06.799 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/Manracefinish78464007.jpg 
2012-01-19 13:59:08.319 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/ManLabtop86510699.jpg 
2012-01-19 13:59:08.320 archiveDrop_cocoa[76758:10b] *** -[NSCFArray componentsSeparatedByString:]: unrecognized selector sent to instance 0x1a75c0 
2012-01-19 13:59:08.321 archiveDrop_cocoa[76758:10b] *** Canceling drag because exception 'NSInvalidArgumentException' (reason '*** -[NSCFArray componentsSeparatedByString:]: unrecognized selector sent to instance 0x1a75c0') was raised during a dragging session 
2012-01-19 13:59:10.726 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/LasVegassign78058995.jpg 
2012-01-19 13:59:10.728 archiveDrop_cocoa[76758:10b] *** -[NSCFArray componentsSeparatedByString:]: unrecognized selector sent to instance 0x1a9010 
2012-01-19 13:59:10.729 archiveDrop_cocoa[76758:10b] *** Canceling drag because exception 'NSInvalidArgumentException' (reason '*** -[NSCFArray componentsSeparatedByString:]: unrecognized selector sent to instance 0x1a9010') was raised during a dragging session 
2012-01-19 13:59:13.342 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/kidscolor57448860.jpg 
2012-01-19 13:59:15.014 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/IVDrip76801701.jpg 
2012-01-19 13:59:18.263 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/stk26719pin.jpg 
2012-01-19 13:59:23.414 archiveDrop_cocoa[76758:10b] /Users/steve/Desktop/thinkstock/WomanLabtop78634274.jpg 
+0

Когда вы нарушите в отладчике на строке, в которой вы звоните 'componentsSeparatedByString:', что делает отладчик сказать 'thisImagePath'? – user1118321

+0

Подсказка: NSLog thisImagePath перед попыткой применить к нему компонентыSeparatedByString. –

+0

@HotLicks - У меня есть эти два пути, которые я отправил, прямо из журнала. – PruitIgoe

ответ

4

Когда вы на 100% уверены, что действительно получаете NSString здесь, почему вы не используете [thisImagePath lastPathComponent]?

http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/lastPathComponent

+0

Вы получаете выигрыш для превращения меня в lastPathComponent ... спасибо, что помогает много. – PruitIgoe

3

Одна из записей в вашем списке изображений - NSArray. Вам нужно выяснить, почему это так.

3

Вы можете посмотреть на NSString's -lastPathComponent или -pathComponents вместо вызова -componentsSeparatedByString:, так как они будут разбирать пути надежно.

Как и в случае с горячими лизками, похоже, вы пытаетесь позвонить по телефону -componentsSeparatedByString на номер NSArray. Я бы NSLog(@"imageList: %@", imageList) несколько образцов файлов капли и посмотреть на то, что вы получаете, или, возможно, внутри для цикла

if (![thisImagePath isKindOfClass:[NSString class]) NSLog(@"Not a String: %@", thisImagePath); 
+0

См. Правки выше, спасибо за нажатие isKindOfClass, что выяснилось, что, по крайней мере, я получаю строки в моем цикле. Теперь, чтобы понять, почему приложение считает, что некоторые из этих строк являются массивами в следующей строке кода ... – PruitIgoe

+0

Проблема решена - это происходит дальше по строке, где я извлекаю метаданные из файла, в частности ключевые слова. Это фотографии на складе и не соблюдаются никакими стандартизациями, некоторые из них имеют ключевые слова в виде строк, а некоторые - как массивы. Проголосовали за помощь. – PruitIgoe

Смежные вопросы