2012-06-29 61 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

相关问题