Цель-C: Создание NSArray из NSString - PullRequest
0 голосов
/ 19 января 2012

Я пытаюсь создать массив из компонентов пути к файлу. У меня есть массив путей к файлам (как 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, она, кажется, работает так, как я планировал:

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];

Условие проверки класса никогда не срабатывает, поскольку все относится к классу 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

Ответы [ 3 ]

4 голосов
/ 19 января 2012

Когда вы на 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

3 голосов
/ 19 января 2012

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

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

if ( ![thisImagePath isKindOfClass:[NSString class] ) NSLog( @"Not a String: %@", thisImagePath );
3 голосов
/ 19 января 2012

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

...