Пытаясь отобразить массив изображений, код возвращает iphone на домашний экран - PullRequest
3 голосов
/ 08 мая 2011

Вот код проблемы:

Код для отображения массива изображений, которые затем можно прокрутить.

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *photos = [[NSArray arrayWithObjects:   
                        [UIImage imageNamed:@"Event.png"],
                        [UIImage imageNamed:@"Logo.png"],
                        [UIImage imageNamed:@"default.png"],
                        [UIImage imageNamed:@"LittleLogoImage.png"],
                        nil] retain];      // TODO – fill with your photos

    // note that the view contains a UIScrollView in aScrollView

    int i=0;
    int width = 0;
    int height = 0;
    for ( NSString *image in photos )
    {
        UIImage *image = [UIImage imageNamed:[photos objectAtIndex:i]];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.clipsToBounds = YES;

        imageView.frame = CGRectMake( imageView.frame.size.width * i++, 0, imageView.frame.size.width, imageView.frame.size.height);

        [aScrollView addSubview:imageView];
        width = imageView.frame.size.width;
        height = imageView.frame.size.height;

        [imageView release];
    }
    aScrollView.contentSize = CGSizeMake(width*i, height);
    aScrollView.delegate = self;
}

Есть идеи?

[Сессия началась в 2011-05-07 22:46:47 +0100.] 2011-05-07 22: 46: 49.314 АЛЬФА [1171: 207] load01 2011-05-07 22: 47: 13.749 АЛЬФА [1171: 207] 2 2011-05-07 22: 47: 13.751 АЛЬФА [1171: 207] dealloc01 2011-05-07 22: 47: 13.755 АЛЬФА [1171: 207] load02 2011-05-07 22: 47: 19,791 АЛЬФА [1171: 207] 4 2011-05-07 22: 47: 19.792 АЛЬФА [1171: 207] dealloc02 2011-05-07 22: 47: 19.795 АЛЬФА [1171: 207] - [UIImage длина]: нераспознанный селектор отправлен экземпляр 0x4b20f60 ​​2011-05-07 22: 47: 19,797 АЛЬФА [1171: 207] * Завершение приложения из-за необученного исключение NSInvalidArgumentException, причина: '- [UIImage length]: не распознан селектор отправлен на экземпляр 0x4b20f60 ​​' * стек вызовов при первом броске: (0 CoreFoundation
0x00dca5a9 исключение, препроцесс + 185 1 libobjc.A.dylib
0x00f1e313 objc_exception_throw + 44 2 CoreFoundation
0x00dcc0bb - [NSObject (NSObject) doesNotRecognizeSelector:] + 187 3
CoreFoundation
0x00d3b966 __ пересылка
+ 966 4
CoreFoundation
0x00d3b522 _CF_forwarding_prep_0 + 50 5 UIKit
0x003e3568 _UIImageAtPath + 36 6
ALPHA
0x000037fd - [PhotosView viewDidLoad] + 597 7 UIKit
0x0036a089 - [представление UIViewController] + 179 8 АЛЬФА
0x00002af3 - [ALPHAViewController displayView:] + 500 9 ALPHA
0x00002707 - [ALPHAAppDelegate displayView:] + 60 10 ALPHA
0x00002cdd - [View2 viewPhotos:] + 99 11 UIKit
0x002ba4fd - [UIApplication sendAction: to: from: forEvent:] + 119 12 UIKit
0x0034a799 - [UIControl sendAction: to: forEvent:] + 67 13 UIKit
0x0034cc2b - [UIControl (внутренний) _sendActionsForEvents: withEvent:] + 527 14 UIKit
0x0034b7d8 - [UIControl прикосновенияВокруглено: withEvent:] + 458 15 UIKit
0x002deded - [UIWindow _sendTouchesForEvent:] + 567 16 UIKit
0x002bfc37 - [UIApplication sendEvent:] + 447 17 UIKit 0x002c4f2e _UIApplicationHandleEvent + 7576 18 графических услуг
0x01722992 PurpleEventCallback + 1550 19 CoreFoundation
0x00dab944 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52 20 CoreFoundation 0x00d0bcf7 __CFRunLoopDoSource1 + 215 21 CoreFoundation
0x00d08f83 __CFRunLoopRun + 979 22 CoreFoundation
0x00d08840 CFRunLoopRunSpecific + 208 23 CoreFoundation
0x00d08761 CFRunLoopRunInMode + 97 24 GraphicsServices
0x017211c4 GSEventRunModal + 217 25 GraphicsServices
0x01721289 GSEventRun + 115 26 UIKit 0x002c8c93 UIApplicationMain + 1160 27 АЛЬФА
0x000026a8 основной + 102 28 ALPHA
0x00002639 старт + 53)

завершить вызов после выброса экземпляра 'NSException'

Еще раз спасибо,

Jack

Ответы [ 4 ]

8 голосов
/ 08 мая 2011
for ( NSString *image in photos )
{
    UIImage *image = [UIImage imageNamed:[photos objectAtIndex:i]];
    ...

Это ваша проблема.У вас есть NSString и UIImage, названные одинаково.Когда вы переопределяете ваш NSString как UIImage, вы путаете ваш цикл forin.Цикл, кажется, все еще думает, что у вас есть NSString, тогда как в действительности у вас есть UIImage.Итак, наш первый шаг - попытаться заменить этот код следующим кодом:

for ( NSString *imageName in photos )
{
    UIImage *image = [UIImage imageNamed:imageName];
    ...

Однако этот код также не будет работать.К счастью, ваш массив images уже хранит UIImages, поэтому вам вообще не нужен NSString!Таким образом, вы можете заменить первые три строки цикла следующим образом:

for ( UIImage *image in photos )
{
    ...

Вот и все!Вам не нужна строка UIImage *image = ..., так как она создана в скобках.

Надеюсь, это поможет!

1 голос
/ 08 мая 2011

В photos вы уже храните объекты UIImage. Почему вы пытаетесь в цикле цикла Крит UIImage из UIImage?

UIImage *image = [UIImage imageNamed:[photos objectAtIndex:i]];

Вы должны сделать так:

UIImage *image = [photos objectAtIndex:i];
0 голосов
/ 03 июля 2018
for ( UIImage *img in photos ){

UIImageView *imageView = [[UIImageView alloc] initWithImage:img];

...... // write something

}
0 голосов
/ 08 мая 2011

photos - это NSArray of UIImages да, вы перечисляете его как строки?

for ( NSString *image in photos ) 

должно быть:

for ( UIImage *image in photos )
    {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.contentMode = UIViewContentModeScaleAspectFit;
        imageView.clipsToBounds = YES;

        imageView.frame = CGRectMake( imageView.frame.size.width * i++, 0, imageView.frame.size.width, imageView.frame.size.height);

        [aScrollView addSubview:imageView];
        width = imageView.frame.size.width;
        height = imageView.frame.size.height;

        [imageView release];
    }
...