将NSMutableArray从一个视图控制器传递到另一个视图控制器中的函数

时间:2012-06-29 12:07:30

标签: objective-c ios nsmutablearray nsarray

我已经在这里阅读了几个关于在两个视图控制器之间传递数据的问题,并且看到了建议这样做的不同方法。我的问题如下:

我有一个视图控制器(我们称之为“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;

在A.m:

@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。

1 个答案:

答案 0 :(得分:1)

你没有初始化你的数组(这就是为什么它是零)。所以在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];
}