加载NSArray UITableViewController

时间:2013-12-05 10:06:21

标签: objective-c nsarray

我有一个标签式视图控制器,我在其中放置了一个表视图,但是当我运行该程序时,我得到了这个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

Array

2 个答案:

答案 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。然后,您无需通过该属性即可访问该变量。