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内のメソッドでこれを設定しようとすると、不正な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
4

1 に答える 1

0

完全を期すために...解決策はAntwenVanHoudtが言ったとおりでした-コピーを保持するように変更しましたが、正常に機能しました。

#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 に答える