无法将数组从一个类传递到另一个类

时间:2012-07-04 07:22:11

标签: objective-c ios ios5 ios4

我有一个愚蠢的怀疑,但我需要正确理解它。我已经提到了几篇关于此的帖子,但它们仍然让我感到困惑。

我有一个数组,它由解析xml得到的一组url组成,我存储了这样的数组:

Parser.m

else if([elementName isEqualToString:@"image"]){
    self.img.imageUrl = self.currentElement;
     [[self URL_array]addObject:img.imageUrl]; 

}

如果我记录内容,它会给出如下内容:

the URL ARRAY IS --------------------->>>>(
"http://www.bedfordevents.co.uk/images/stories/template/GallerySlideshow/b10.jpg\n",
"http://www.bedfordevents.co.uk/images/stories/template/GallerySlideshow/b11.jpg\n",
"http://www.bedfordevents.co.uk/images/stories/template/GallerySlideshow/b12.jpg\n",
"http://www.bedfordevents.co.uk/images/stories/template/GallerySlideshow/b13.jpg\n",

我需要将此数组传递给另一个类/视图控制器,我在Parser.m文件中一直这样做

ViewController *control = [[ViewController alloc]init];
control.image_array = URL_array;

视图控制器有一个数组image_array

我在ViewController.m中像这样调用

NSLog(@"array is----->>%@ ",self.image_array);

但是image_array返回null;

我相信我在某处做错了,有人能指出我的错误并帮助我吗?

谢谢。

修改

代码已更新。  现在我在ViewController中有一个方法,如上所述

-(void)updateImageArray:(NSMutableArray *)imageArray{
self.image_array = [NSMutableArray arrayWithArray:imageArray];
NSLog(@"array is in here-------->>>>%@",self.image_array);
}

并致电

[control updateImageArray:URL_array];

在我的Parser.m中,数组显示在ViewController.m中的日志及其工作

谢谢

4 个答案:

答案 0 :(得分:0)

这取决于control.image_array属性的模式。因此,如果它的分配,则数组的引用计数不会增加,并且如果源上下文(Parser.m)释放他,则可能会释放。所以在ViewController的界面中它应该是

@property(retain, nonatomic)NSArray* image_array

或者如果您使用ARC:

@property(strong, nonatomic)NSArray* image_array

答案 1 :(得分:0)

根据您的描述,我认为您在parser.m中创建ViewController的对象,并尝试使用ViewController的另一个对象log NSLog(@"array is----->>%@ ",self.image_array),其中image数组的值为nil。(尝试记录self,controller两者都不同。)

如果你来自parser.m log NSLog(@"array is----->>%@ ", control.image_array)它将起作用。

如果你需要在ViewController.m上记录它,你可以使用委托方法或将ViewController的对象(即控件)从parser.m传递给ViewController.m,为此可以使用外部变量。

答案 2 :(得分:0)

根据您在评论中所写的内容,似乎在设置image_array之前调用了viewDidLoad

您可以添加方法[control updateImageArray:URL_array],然后在此方法集self.image_array = [NSArray arrayWithArray:URL_array];内添加并根据需要刷新UI

答案 3 :(得分:0)

您必须在ViewController中覆盖image_array的getter方法。 通过记忆前景,这将是很好的。

在ViewControler.m中

@synthesize image_array = _image_array;

-(NSMutableArray *)image_array {  
    if(_image_array == nil) {
       _image_array = [[NSMutableArray alloc]initWithCapacity:0];
      } 
  return _image_array;
}

然后执行此操作

[control setImage_array:URL_array];

虽然您可以执行[control setImage_array:URL_array];