доступ к файлу класса падает при запуске прокрутки (UIScrollview) - PullRequest
0 голосов
/ 26 апреля 2011

надеюсь, кто-нибудь сможет мне помочь. У меня есть UIScrollView на моей странице. .H файл установил UIscrollviewdelegate.

У меня есть файл класса с именем "Picture.h / Picture.m".

- (id)initWithName:(NSString *)aName filename:(NSString *)aFilename {
    self.name = aName;
    self.filename = aFilename;
    return self; 
}

В этом файле класса я просто установил пару строк. Я загружаю массив с объектом этого класса изображения, например

Picture *image2 = [[Picture alloc] initWithName:@"Apple" filename:@"apple.png"];
[pictureArray addObject: image2];
[image2 release];

В моем viewController я вызываю этот класс и присваиваю его как таковое

Picture *thisPicture = (Picture *)[appDelegate.pictureArray objectAtIndex:0];
view2image.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@", thisPicture.filename]];

Выше работает нормально. Изображение настроено на то, что я когда-либо ставлю, например, «apple.png». Однако, когда я пытался установить это в методе - (void) scrollViewDidScroll:(UIScrollView *) в моем viewController, я получаю ошибку exec, и приложение вылетает.

Тем не менее, если у меня был массив имен файлов (поэтому я не сохранял свой объект класса в массиве) и доступ к objectAtIndex: 0 в scrollViewDidScroll - он работает нормально.

Итак, этот код в порядке.

nextImageView.image = [UIImage imageNamed: [NSString stringWithFormat:@"%@", [appDelegate.pictureCardsArray objectAtIndex:0]]];

но это вылетает

Picture *image3 = (Picture *)[appDelegate.pictureArray objectAtIndex:0];
nextImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@", image3.filename]];

Интересно, что если я не пытаюсь получить доступ к элементу image3 (например, image3.filename), он не падает. Это бесполезно, хотя! Кроме того, если я отключаю делегат = self для uiscrollview, то этот код работает, но не выполняется ни одно из действий прокрутки. Я сталкивался с этим сообщением (/1147936/uiscrollview-na-uiviewcontroller) при поиске решения, но не вижу, где я мог бы выпустить viewController раньше. На всякий случай, ничего не выпускается (пока!)

Надеюсь, кто-то сможет пролить свет на это !!

[edit] Просто добавляю полные файлы классов] [/ edit]

Picture.h

#import <UIKit/UIKit.h>

@interface Picture : NSObject {
    NSString *name;
    NSString *filename;
}

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *filename;

- (id)initWithName:(NSString *)aName filename:(NSString *)aFilename;

@end

Picture.m

#import "Picture.h"

@implementation Picture
@synthesize name, filename;

- (id)initWithName:(NSString *)aName filename:(NSString *)aFilename {

    self.name = aName;
    self.filename = aFilename;
    return self;

}

@end

1 Ответ

0 голосов
/ 10 мая 2011

Просто для полноты ... решение было, как сказал Антвен Ван Хоудт, - я изменил копию, чтобы сохранить, и она работала нормально.

#import <UIKit/UIKit.h>

@interface Picture : NSObject {
    NSString *name;
    NSString *filename;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *filename;

- (id)initWithName:(NSString *)aName filename:(NSString *)aFilename;

@end
...