うまくいけば、誰かが私を助けることができるでしょう。ページに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エラーが発生し、アプリがクラッシュします。
それでも、ファイル名の配列があり(したがって、クラスオブジェクトを配列に格納していない)、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を早期にリリースする可能性がある場所がわかりません。安全のために、何もリリースされていません(まだ!)
誰かがそれに光を当てることができるかもしれません!!
[編集]クラスファイル全体を追加するだけです][/編集]
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