Нераспознанный селектор отправлен на экземпляр - PullRequest
0 голосов
/ 25 ноября 2011

У меня проблема, которую я не понимаю даже после прочтения нескольких тем

Это ошибка, которую я получаю:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x576f8f0'

Это код:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *filePath = [[self documentsPath] stringByAppendingPathComponent:@""];

    NSFileManager *imagesFileManager = [NSFileManager defaultManager];

    imagesArr = [[imagesFileManager contentsOfDirectoryAtPath:filePath error:nil]filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]];

    arryList = [[NSMutableArray alloc] initWithArray:[imagesArr copy]];//display text
    imagesList = [[NSMutableArray alloc]init];//display image

    NSString *docPath = [self documentsPath];

    for (NSString *anImagePath in arryList) {
        anImagePath = [NSString stringWithFormat:@"%@/%@",docPath,anImagePath];
        UIImage *image = [UIImage imageWithContentsOfFile:anImagePath];
        if (image)
            [imagesList addObject:image];

        NSLog(@"%@", anImagePath);
    }
}   

Ответы [ 2 ]

6 голосов
/ 25 ноября 2011

Вы не тот, кто звонит length на UIImage, цикл forin есть. Это потому, что объекты в arrayList на самом деле являются изображениями, но цикл думает, что они являются строками, потому что вы, по сути, приводили их к типу при помощи NSString *anImagePath. Попробуйте изменить свой код с этого:

for (NSString *anImagePath in arryList) {
    anImagePath = [NSString stringWithFormat:@"%@/%@",docPath,anImagePath];
    UIImage *image = [UIImage imageWithContentsOfFile:anImagePath];
    if (image)
        [imagesList addObject:image];

    NSLog(@"%@", anImagePath);
}

к этому:

for (UIImage *image in arryList) {
    if (image)
        [imagesList addObject:image];

    NSLog(@"%@", anImagePath);
}

Я предполагаю, что вы уже храните UIImage объекты в массиве. Для получения дополнительной информации посетите Пытаясь отобразить массив изображений, код возвращает iphone на главный экран .

0 голосов
/ 06 декабря 2011

Хорошо, вот еще один вариант. Надеюсь, на этот раз я понимаю вашу проблему лучше. forin имеет проблемы при попытке изменить его коллекцию, поэтому, возможно, это поможет.

Изменить это:

for (NSString *anImagePath in arryList) {
    anImagePath = [NSString stringWithFormat:@"%@/%@",docPath,anImagePath];

К этому:

for (NSString *anImagePath in imagesArr) {
    [arrayList setObject:[NSString stringWithFormat:@"%@/%@",docPath,anImagePath]
                 atIndex:[imagesArr indexOfObject:anImagePath]];

Таким образом, мы циклически перебираем копию модифицируемого массива, а не сам массив, который мы модифицируем. Однако это довольно плохой код (создающий arrayList как копию imagesArr и затем уничтожающий все его объекты), поэтому мы могли бы попробовать следующее:

Изменить это:

arrayList = [[NSMutableArray alloc] initWithArray:[imagesArr copy]];

К этому:

arrayList = [[NSMutableArray alloc] init];

Затем в нашем цикле forin измените это:

for (NSString *anImagePath in imagesArr) {
    [arrayList setObject:[NSString stringWithFormat:@"%@/%@",docPath,anImagePath]
                 atIndex:[imagesArr indexOfObject:anImagePath]];

На это:

for (NSString *anImagePath in imagesArr) {
    [arrayList addObject:[NSString stringWithFormat:@"%@/%@",docPath,anImagePath]];

Надеюсь, это работает лучше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...