0

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

我有一个在工具栏中有一个搜索栏的视图控制器(我们称之为“A”)。没有其他的。然后我有另一个视图控制器(“B”),当用户在搜索栏中搜索时按下键盘上的搜索按钮时,它负责显示弹出视图。这一切都有效。用户输入文本,按下搜索按钮,弹出框就会显示出来。伟大的。

现在我还没有在弹出表视图中显示任何搜索结果,并试图将 a 作为参数传递 NSMutableArray给 B 中的函数:

单位:

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

现在这一切都有效,除了我没有将 temp 的内容传递到 Bm 中的函数中,我是空的(nil)。这是我的问题。

我对 iOS 还很陌生,因此我们将不胜感激。

编辑:忘了提到我正在使用ARC。

4

1 回答 1

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];
}
于 2012-06-29T12:35:32.593 回答