0

ばかげた疑問がありますが、それを正しく理解する必要があります。私はこれについていくつかの投稿を参照しましたが、それでも私には混乱しています。

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_arraynullを返します。

私はどこかでそれを間違っていると信じています、誰かが私の間違いを指摘して私を助けることができますか?

ありがとうございました。

編集

コードが更新されました。今私は言ったように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

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

あなたの説明から、私はあなたがparser.mでViewControllerのオブジェクトを作成していると思います、そしてあなたlog NSLog(@"array is----->>%@ ",self.image_array)は画像配列の値がnilであるViewControllerの別のオブジェクトを使おうとします(自己を記録しようとすると、コントローラーは両方とも異なります)。

log NSLog(@"array is----->>%@ ", control.image_array)parser.mの場合は、機能します。

ViewController.mにログオンする必要がある場合は、デリゲートメソッドを使用するか、ViewControllerのオブジェクト(つまり、コントロール)をparser.mからViewController.mに渡すことができます。これには、外部変数を使用できます。

于 2012-07-04T08:23:27.197 に答える
0

それは、プロパティのモードによって異なりcontrol.image_arrayます。したがって、割り当てられている場合、配列のrefcountはインクリメントされず、ソースコンテキスト(Parser.m)が彼を解放した場合に割り当てが解除される可能性があります。したがって、ViewControllerのインターフェイスでは次のようになります。

@property(retain, nonatomic)NSArray* image_array

またはARCを使用する場合:

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

コメントに書いたことから、viewDidLoadimage_arrayを設定する前にはと呼ばれているようです。

メソッドを追加して[control updateImageArray:URL_array]から、このメソッドセット内でself.image_array = [NSArray arrayWithArray:URL_array];、必要に応じてUIを更新できます。

于 2012-07-04T08:40:13.200 に答える