Я пытаюсь создать массив из компонентов пути к файлу. У меня есть массив путей к файлам (как NSStrings), и я зацикливаюсь на них, затем разбиваю каждый путь следующим образом:
//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 является строкой.)
Моя цель - получить имя файла из пути к файлу. Есть ли лучший способ сделать это, чем подход, который я использую?
Когда я делаю шаг (помещая точку отладки в строку componentSeparatedByString, она, кажется, работает так, как я планировал:
Но если я продолжу, он вылетит.
Как и предполагалось, я изменил свой код для регистрации данных:
//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];
Условие проверки класса никогда не срабатывает, поскольку все относится к классу NSString. Однако некоторые файлы работают, а некоторые нет ...
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