0

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

我有一个数组,它由我从解析 xml 中获得的一组 url 组成,我像这样存储数组:

解析器

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

4 回答 4

0

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

@property(retain, nonatomic)NSArray* image_array

或者如果您使用 ARC:

@property(strong, nonatomic)NSArray* image_array
于 2012-07-04T07:33:18.417 回答
0

从您在评论中写的内容来看,似乎viewDidLoad在您设置 image_array.

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

于 2012-07-04T08:40:13.200 回答
0

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

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

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

于 2012-07-04T08:23:27.197 回答
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];

于 2012-07-04T10:25:47.843 回答