0

希望有人能帮助我。我的页面上有一个 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
4

1 回答 1

0

只是为了完整性......解决方案正如 Antwen Van Houdt 所说 - 我将副本更改为保留,并且效果很好。

#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
于 2011-05-09T21:18:13.607 回答