NSMutableArray对象丢失

时间:2013-02-09 07:19:15

标签: objective-c ios6.1

我希望这有意义......我有一个NSMutableArray,我正在尝试存储多个UIScrollView。每个UIScrollView将有多个图像,最终目标是允许用户垂直滑动类别(UIScrollView的每个实例)和水平对于该类别中的每个图像(UIImageView的每个实例)。现在,直到我得到这个代码才能工作,我只是用1个图像创建1个UIScrollView,我将它添加到scrollViewManager。这似乎正确地添加了一切,但是当我离开这个功能时,游戏结束了。我的数组是空的。我不明白。当我添加到Array时,我应该做一些深度复制,这样它就不会被破坏。也许我会在明天醒来的时候明白这一点,但就目前而言,我想要打破一切。提前谢谢!

编辑:很抱歉由于缺乏细节,我发布的内容相当晚。我的项目是使用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];

1 个答案:

答案 0 :(得分:0)

有些事情含糊不清。例如:

  1. 您是否正在使用ARC,如果没有,您将在任何地方发布您的scrollView?
  2. 您使用的是自动创建合成的东西吗?
  3. 您的scrollViewManager是什么类型的属性(弱,强等)。
  4. 如果您在定义属性时自动创建ivars,则应将您的ivar称为_scrollViewManager,而不是scrollViewManager

    使用此方法时,self.scrollViewManager的使用是正确的。

    我总是以相反的方式做这种事情。当我有这样的房产时:

    @property (nonatomic, strong) NSMutableArray* myArray;
    

    我总是使用self关键字初始化它们:

    self.myArray = [NSMutableArray new];
    

    在修改它时,我总是使用生成的ivar:

    [_myArray addObject:myFineObject];
    

    我认为这是我从非ARC转向ARC时一直使用的东西。不确定它是否仍然可行,但它的工作方式与预期相符。