为什么使用mutableArray的tableView很难实现?

时间:2013-06-10 16:43:29

标签: ios objective-c cocoa-touch uitableview

我确实试图让tableView正确实现20多个小时。我已经问了几个问题,堆叠溢出,看了几十个其他问题以及有类似问题的论坛中的问题。我得到的最接近的是一个带有空tableView的运行程序。我对目标c感到非常沮丧。

有人可以发布一个加载了可变数组的单个表视图的示例,其中包含从文本视图和按钮添加的数据吗?这是我的无用代码的一个变体...它没有运行以下错误:

2013-06-10 11:42:05.939 WIDMIR Sign-In[32878:11303] *** Terminating app due to 
uncaught exception 'NSUnknownKeyException', reason: '[<ViewController 0x7517c00> 
setValue:forUndefinedKey:]: this class is not key value coding-compliant for 
the key add.'
*** First throw call stack: (0x1c93012 0x10d0e7e 0x1d1bfb1 0xb7ce41 0xafe5f8 0xafe0e7
0xb28b58 0x232019 0x10e4663 0x1c8e45a 0x230b1c 0xf57e7 0xf5dc8 0xf5ff8 0xf6232 0x453d5  
0x4576f 0x45905 0x4e917 0x231b 0x12157 0x12747 0x1394b 0x24cb5 0x25beb 0x17698 0x1beedf9 
0x1beead0 0x1c08bf5 0x1c08962 0x1c39bb6 0x1c38f44 0x1c38e1b 0x1317a 0x14ffc 0x1f5d 0x1e85)
libc++abi.dylib: terminate called throwing an exception (lldb)

·H:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>{
    UITableView *tableView;
}

- (IBAction)add:(id)sender;


@property (nonatomic, retain) NSMutableArray *currentNames;

@property (weak, nonatomic) IBOutlet UITextField *name;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end

的.m:

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize name;

@synthesize currentNames;

@synthesize tableView = _tableView;

- (void)viewDidLoad
{
    self.currentNames = [[NSMutableArray alloc] init];
    [super viewDidLoad];
    UITableView *tv = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame] style:UITableViewStylePlain];
    self.tableView = tv;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [currentNames count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.textLabel.text = [currentNames objectAtIndex:indexPath.row];

    return cell;
}

- (IBAction)add:(id)sender {
    [currentNames addObject:[name text]];
    [tableView reloadData];

    name.text=@"";
}
@end

1 个答案:

答案 0 :(得分:1)

您未将“self”设置为表视图的委托或数据源。因此不应该调用cellForRowAtIndexPath:numberOfRowsInSection:。您是否设置了断点,以便发现它们已经被调用了?

错误消息表明您尝试为属性“add”分配值。你可以本地化抛出异常的位置吗?您是否尝试添加“All Exceptions”断点?如果没有那么这样做,我们就从那里开始。