Iphone 开始滚动时访问类文件崩溃(UIScrollview)

Iphone 开始滚动时访问类文件崩溃(UIScrollview),iphone,class,ios4,uiscrollview,uiscrollviewdelegate,Iphone,Class,Ios4,Uiscrollview,Uiscrollviewdelegate,希望有人能帮助我。我的页面上有一个UIScrollView。.h文件已设置UIscrollviewdelegate 我有一个名为Picture.h/Picture.m的类文件 - (id)initWithName:(NSString *)aName filename:(NSString *)aFilename { self.name = aName; self.filename = aFilename; return self; } 在这个类文件中,我只设置了几个字符

希望有人能帮助我。我的页面上有一个UIScrollView。.h文件已设置UIscrollviewdelegate

我有一个名为Picture.h/Picture.m的类文件

- (id)initWithName:(NSString *)aName filename:(NSString *)aFilename {
    self.name = aName;
    self.filename = aFilename;
    return self; 
}
在这个类文件中,我只设置了几个字符串。例如,我用这个picture类的对象加载一个数组

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。然而,当我试图在我的viewController中的-void-scrollViewDidScroll:UIScrollView*方法中设置此选项时,我遇到了一个错误的exec错误,应用程序崩溃

但是,如果我有一个文件名数组,因此不将我的类对象存储在数组中,而在scrollViewDidScroll中访问objectAtIndex:0,那么它就可以正常工作

所以,这个代码是可以的

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,它不会崩溃。不过这没用!另外,如果我为uiscrollview禁用delegate=self,那么这段代码可以工作,但不会触发任何滚动操作。我偶然发现了这个帖子http://stackoverflow.com/questions/1734720/uiscrollview-on-a-uiviewcontroller 在搜索解决方案时,但看不到可能提前释放viewController的位置。为了安全起见,还没有发布任何内容

希望有人能解释一下

[编辑]只需添加完整的类文件][编辑]

图片.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

只是为了完整。。。解决办法正如安特温·范霍特所说的——我将副本改为保留,效果很好

#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

您是如何定义类的属性的?是否保留名称/文件名?谢谢-刚刚添加到类files中,所以问题出在非原子副本上。我已经改成了非原子的,保留的,而且效果很好。谢谢你的提醒!啊,是的,只有当你真的需要一个对象的另一个实例时,你才应该使用copy,例如,当它们可能会在将来的数组中从mutablearray等更改时。
#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