【发布时间】:2012-06-29 12:07:30
【问题描述】:
我已经阅读了关于 SO 在两个视图控制器之间传递数据的几个问题,并看到了建议的不同方式。我的问题如下:
我有一个视图控制器(我们称之为“A”),它在工具栏中有一个搜索栏。没有其他的。然后我有另一个视图控制器(“B”),当用户在搜索栏中搜索时按下键盘上的搜索按钮时,它负责显示弹出视图。 这一切都有效。用户输入文本,按下搜索按钮,弹出框就会显示出来。太好了。
现在我还没有在 popover tableview 中显示任何搜索结果,我正在尝试将 NSMutableArray 作为参数传递给 B 中的函数:
在 B.h:
@property (nonatomic, retain) NSMutableArray *searchResults;
在 B.m:
@synthesize searchResults;
-(void)setSearchResults:(NSMutableArray *)resultArray{
[self.searchResults removeAllObjects];
[self.searchResults addObjectsFromArray:resultArray];
}
在 A.h 中:
#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];
}
现在这一切正常,除了我没有将 temp 的内容传递到 B.m 中的函数中。我是空的(零)。这是我的问题。
我对 iOS 还很陌生,因此我们将不胜感激。
编辑:忘了提到我正在使用 ARC。
【问题讨论】:
-
我建议你在初始化 B 视图控制器的对象时传递结果数组。或者您必须通过调用 [viewControllerObjectB.tableview reloadData] 在加载新结果后重新加载 tableview 数据
-
为了清楚 what 是 nil,你从
communicateWithB方法中的NSLog(@"Temp: %@", temp);得到什么?另外,NSLog(@"Result: %@", resultArray);在setSearchResults? (如果“Temp”说它为零,那searchResultsArray呢?) -
在 searchResultsArray 我得到一个包含 5 个对象的数组。在communicateWithB 我得到一个空数组。我在
addobjectsFromArray行下方设置了一个刹车点并打印出内容。
标签: objective-c ios nsmutablearray nsarray