我可以将值放入数组中,这是我的代码和问题。
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”也是正确的。
但是当我去这个时
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"jsonkanji 0 %@",[jsonKanji objectAtIndex:1]);
...
return cell;
}
它崩溃了!!请帮我解释一下发生了什么?它只显示“EXC_BAD_ACCESS”@ main.m
答案 0 :(得分:3)
您遇到内存管理问题。 [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 :(得分:1)
NSMutableArray arrayWithArray:
已自动释放。你需要保留它。
答案 2 :(得分:1)
您需要保留NSMutable数组,尝试为数组创建属性。
将以下内容添加到.h文件
@property (nonatomic, retain) NSMutableArray *jsonKanji;
然后@synthesize .m文件中的jsonKanji。 并将数组的加载更改为:
- (void)viewDidAppear:(BOOL)animated{
...
self.jsonKanji = [NSMutableArray arrayWithArray:(NSArray *)[jsonDict valueForKey:@"kanji_name"]];
...
}