NSMutableArray не передать значение в CellForRowAtIndexPath? - PullRequest
0 голосов
/ 18 апреля 2011

Я могу поместить значение в массив, и вот мой код и проблема.

Search.h

@interface SearchKeyword : UIViewController {
    UITableView * newsTable;
    UILabel * waitLabel;
    UIActivityIndicatorView *activityIndicator;
    UIView * backView;

    NSMutableArray *jsonKanji;
}

@property (nonatomic, retain) IBOutlet UITableView * newsTable;
@property (nonatomic, retain) IBOutlet UILabel * waitLabel;
@property (nonatomic, retain) IBOutlet UIActivityIndicatorView * activityIndicator;
@property (nonatomic, retain) IBOutlet UIView * backView;

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier;

@end

и вот Search.m

- (void)viewDidAppear:(BOOL)animated{
...
jsonKanji = [NSMutableArray arrayWithArray:(NSArray *)[jsonDict valueForKey:@"kanji_name"]];
...
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"jsonkanji 0 %@",[jsonKanji objectAtIndex:0]);
    return [jsonKanji count];
}

Вот правильный результат "jsonkanji 0 Japan", и если я изменю objAtindex = 1, то это также показывает "jsonkanji 1 England". Это тоже правильно.

Но когда я перехожу к этомукрушение !!Пожалуйста, помогите мне объяснить, что случилось?И он показывает только "EXC_BAD_ACCESS" @ main.m

Ответы [ 3 ]

3 голосов
/ 18 апреля 2011

У вас проблема с управлением памятью. [NSMutableArray arrayWithArray:] предоставляет вам автоматически освобожденный объект в соответствии с рекомендациями Apple по управлению памятью.

В вашем первом тесте вы проверяете значение в некоторый момент перед тем, как объект будет освобожден. К тому времени, как прибыл вызов делегата из табличного представления, объект был освобожден, и память больше не существует.

Вам необходимо сохранить массив при его создании (и освободить его, когда закончите с ним).

Вы можете сделать это явно:

- (void)viewDidAppear:(BOOL)animated{
    ...
    jsonKanji = [[NSMutableArray arrayWithArray:(NSArray *)[jsonDict valueForKey:@"kanji_name"]] retain];
    ...
}

Или создайте свойство и присвойте значение, используя свойство, которое будет обрабатывать само сохранение: (Интерфейс)

@interface SearchKeyword : UIViewController {
....
@property (nonatomic, retain) INSMutableArray *jsonKanji;
...
@end

(реализации)

- (void)viewDidAppear:(BOOL)animated{
    ...
    self.jsonKanji = [NSMutableArray arrayWithArray:(NSArray *)[jsonDict valueForKey:@"kanji_name"]];
    ...
}
1 голос
/ 18 апреля 2011

Вам нужно сохранить массив NSMutable, попробуйте создать свойство для массива.

Добавьте следующее в ваш файл .h

@property (nonatomic, retain) NSMutableArray *jsonKanji;

Затем @synthesize jsonKanji в.м файл.И измените загрузку массива на:

- (void)viewDidAppear:(BOOL)animated{
   ...
   self.jsonKanji = [NSMutableArray arrayWithArray:(NSArray *)[jsonDict valueForKey:@"kanji_name"]];
   ...
}
1 голос
/ 18 апреля 2011

NSMutableArray arrayWithArray: автоматически выпущен. Вы должны сохранить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...