1

これが理にかなっていることを願っています...複数のUIScrollViewを格納しようとしているNSMutableArrayがあります。各UIScrollViewには複数の画像があり、最終的な目標は、ユーザーがカテゴリに対して垂直にスワイプできるようにすることです(それぞれUIScrollView のインスタンス) と、そのカテゴリの各画像 (UIImageView の各インスタンス) の水平方向。今のところ、このコードが機能するまでは、1 つの画像で 1 つの UIScrollView を作成し、それを scrollViewManager に追加しています。これですべてが正しく追加されたように見えますが、この機能を終了するとゲーム オーバーになります。私の配列は空です。理解できない。配列に追加するときに、ある種のディープ コピーを実行して、配列が破壊されないようにする必要がありますか。明日目が覚めたらわかるかもしれないけど、とりあえず、目の前にあるものすべてを壊したい。ありがとう、

編集:詳細が不足していて申し訳ありません。これはかなり遅れて投稿しました。私のプロジェクトはARCを使用しているため、scrollViewをどこにもリリースしていません。私のヘッダーファイルでの scrollViewManager の宣言は次のとおりです。

@property (nonatomic, retain) NSMutableArray *scrollViewManager;

scrollView を取得するために使用するコードは次のとおりです。

UIScrollView *test = (UIScrollView*) [self.scrollViewManager objectAtIndex: 0];

scrollView と配列を初期化するコードは次のとおりです。

    scrollViewManager = [[NSMutableArray alloc] initWithCapacity: 1];

        UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
        [scrollView setBackgroundColor:[UIColor blackColor]];
        [scrollView setCanCancelContentTouches:NO];
        scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
        scrollView.clipsToBounds = YES;     // default is NO, we want to restrict drawing within our scrollview
        scrollView.scrollEnabled = YES;
        scrollView.pagingEnabled = YES;

        NSString *imageName = @"pic1.png";//[NSString stringWithFormat:@"pic%d.jpg", i+1];
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
        CGRect rect = imageView.frame;
        rect.size.height = 400;
        rect.size.width = 300;
        imageView.frame = rect;
        imageView.tag = 1;  // tag our images for later use when we place them in serial fashion
        [scrollView addSubview:imageView];            

        [self.scrollViewManager addObject: scrollView];
4

1 に答える 1

0

There are some things that are kind of vague. For example:

  1. Are you using ARC, if not and you are releasing your scrollView anywhere?
  2. Are you using the auto-create-synthesize thing?
  3. scrollViewManager のプロパティのタイプ (弱い、強いなど)。

プロパティを定義するときに ivar を自動的に作成する場合は、.ivar の代わりに ivar を呼び出す必要があり_scrollViewManagerますscrollViewManager

このメソッドを使用する場合、の使用self.scrollViewManagerは正しいです。

私はいつもこの種のことを逆にしています。次のようなプロパティがある場合:

@property (nonatomic, strong) NSMutableArray* myArray;

私は常にselfキーワードを使用してそれらを初期化します。

self.myArray = [NSMutableArray new];

それを変更するときは、常に生成された ivar を使用します。

[_myArray addObject:myFineObject];

これは、非ARCからARCに移行するときに使い続けたものだと思います。まだうまくいくかどうかはわかりませんが、期待どおりに機能します。

于 2013-02-09T08:23:18.397 に答える