0

2つのViewController間でデータを渡すことについて、SOに関するいくつかの質問を読み、それを行うために提案されたさまざまな方法を見てきました。私の問題は次のとおりです。

ツールバーに検索バーがあるViewController(これを「A」と呼びます)があります。他には何もありません。次に、ユーザーが検索バーで検索するときにキーボードの検索ボタンを押したときにポップオーバービューを表示する別のビューコントローラー(「B」)があります。これはすべて機能します。ユーザーがテキストを入力し、検索ボタンを押すと、ポップオーバーが表示されます。素晴らしい。

NSMutableArray今、私はまだポップオーバーテーブルビューに検索結果を表示しておらず、引数としてBの関数にaを渡そうとし ています。

Bhで:

@property (nonatomic, retain) NSMutableArray *searchResults;

Bmで:

    @synthesize searchResults;

     -(void)setSearchResults:(NSMutableArray *)resultArray{
         [self.searchResults removeAllObjects];
         [self.searchResults addObjectsFromArray:resultArray];
     }

ああ:

#import "B.h"
@property(nonatomic, retain) B *viewControllerObjectB;

午前中:

@synthesize viewControllerObjectB;

 //The searchResultsArray is passed on from another function
-(void)communicateWithB:(NSMutableArray *)searchResultsArray{

    //I initialize the viewControllerObjectB in here

    NSMutableArray *temp = [[NSMutableArray alloc] initWithArray:searchResultsArray];
    [viewControllerObjectB setSearchResults:temp];
}

これで、Bm I'ts empty(nil)の関数に渡されたtempのコンテンツを取得しないことを除いて、これはすべて機能します。これが私の問題です。

私はiOSにかなり慣れていないので、すべての助けをいただければ幸いです。

編集:私がARCを使用していることを言及するのを忘れました。

4

1 に答える 1

1

配列を初期化しませんでした(それがnilである理由です)。したがって、allocメソッドでは、次のことを行う必要があります。

- (id)init {
    self = [super init];

     if (self) {
          self.searchResults = [NSMutableArray arrayWithCapacity:10];
     }
}

また、コードに2つの問題があります。

@synthesize searchResults;

     -(void)setSearchResults:(NSMutableArray *)resultArray{
         //PROPERTY LOGIC IS RETAIN, SO YOU NEED TO RELEASE/RETAIN WHEN YOU OVERRIDE A SETTER
         if (searchResults != resultArray) {
              [searchResults release];
              searchResults = [resultArray retain];
         }
     }


-(void)communicateWithB:(NSMutableArray *)searchResultsArray{

    //I initialize the viewControllerObjectB in here
    //MEM. LEAK ON TEMP
    NSMutableArray *temp = [[[NSMutableArray alloc] initWithArray:searchResultsArray] autorelease];
    [viewControllerObjectB setSearchResults:temp];
}
于 2012-06-29T12:35:32.593 に答える