希望有人能帮助我。我的页面上有一个 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 中的方法中设置它时,我得到了一个错误的执行错误并且应用程序崩溃了。
然而,如果我有一个文件名数组(所以不将我的类对象存储在数组中)并在 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
图片.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