2012-06-29 60 views
0

我已經閱讀了關於在兩個視圖控制器之間傳遞數據的SO上的幾個問題,並且看到了建議這樣做的不同方式。我的問題如下:從一個視圖控制器傳遞NSMutableArray到另一個函數

我有一個視圖控制器(讓我們稱之爲「A」),在工具欄中有一個搜索欄。沒有其他的。然後,我有另一個視圖控制器(「B」)負責在用戶在搜索欄中搜索時按下鍵盤上的搜索按鈕時顯示彈出視圖。 這一切工作。用戶輸入文字,按下搜索按鈕,顯示彈出窗口。大。

現在我還沒有顯示在酥料餅的tableview任何搜索結果,我試圖在B到NSMutableArray傳遞給函數作爲參數:

在波黑

@property (nonatomic, retain) NSMutableArray *searchResults; 
在家蠶

@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]; 
} 

現在除了我這一切的作品沒有得到臨時的傳遞到B.M.功能內容我沒有空(無)。這是我的問題。

我對iOS相當新,所以一切幫助將不勝感激。

編輯:忘了提及我正在使用ARC。

+0

我建議你,當你initalize B觀看控制器的對象傳遞結果數組的時間。或者你必須通過調用[viewControllerObjectB.tableview reloadData]加載新的結果後重新加載tableview數據。 – iNeal

+0

只需清楚** **是什麼零,你從NSLog(@「Temp:%@」, temp);'在'communicWithB'方法中?另外,'NSLog(@「結果:%@」,resultArray);'在'setSearchResults'中? (如果「Temp」表示它爲零,那麼'searchResultsArray'呢?) –

+0

在searchResultsArray中,我得到一個包含5個對象的數組。在communicWithB我得到一個空的數組。我在'addobjectsFromArray'行下面設置了一個剎車點並打印出內容。 – Hrafn

回答

1

你沒有初始化你的數組(這就是爲什麼它是零)。因此,在頁頭的方法,你應該:

- (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]; 
} 
+0

對不起,應該補充說我使用的是ARC,所以我不需要指定'autorelease'也不需要手動'release'。 'searchResults'在'viewDidLoad'中初始化,所以我不認爲這是問題所在。 Thx雖然。 – Hrafn

+0

你有一個提交/ /我在這裏初始化viewControllerObjectB,所以它可以是viewDidLoad沒有被調用,所以你的self.searchResults在這一點上是零?你應該看看searchResults是否在你的setter中放置了一個斷點時初始化了任何數組 – DarthMike

+0

我是一個白癡。我錯誤地分配了數組。應該是doind'searchResults = resultArray'。雖然這不是你說的直接,但你的回答讓我直觀。 – Hrafn

相關問題