我有一个标签式视图控制器,我在其中放置了一个表视图,但是当我运行该程序时,我得到了这个EXC_BAD_ACCESS信号。
数组未加载并产生此错误。
这是我的代码:
ContactsViewController.h
#import <UIKit/UIKit.h>
@interface ContactsViewController : UITableViewController <UITableViewDataSource,UITableViewDelegate>
@property (nonatomic ,retain) NSArray *items;
@end
ContactsViewController.m
#import "ContactsViewController.h"
@interface ContactsViewController ()
@end
@implementation ContactsViewController
@synthesize items;
- (id)initWithStyle:(UITableViewStyle)style {
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
items = [[NSArray alloc] initWithObjects:@"item1", @"item2", "item3", nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [items count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
return cell;
}
@end
答案 0 :(得分:2)
代码的问题在于(如调试器所示)在以下行中:
items = [[NSArray alloc] initWithObjects:@"item1", @"item2", "item3", nil];
仔细看看“item3”。前面没有@
符号,因此它不是NSString
对象,而是普通的旧C字符串。您只能将对象放入NSArray
。
将其更改为
items = [[NSArray alloc] initWithObjects:@"item1", @"item2", @"item3", nil];
甚至更简单
item = @[@"item1", @"item2", @"item3"];
答案 1 :(得分:0)
如果没有剩下的代码,就不可能确定问题是什么,但你应该通过以下方式通过属性访问变量。
self.items = ...
还要考虑使用速记数组表示法,如下所示。
self.items = @[@"Item 1", @"Item 2", @"Item 3"];
IMO:您应该直接使用变量的唯一时间是覆盖属性附件。
另请注意,如果您确实想直接使用变量,则应将synthesize命令更改为以下@synthesize items = variableName;
这会在属性中使用的基础变量上添加名称variableName
。然后,您无需通过该属性即可访问该变量。