【发布时间】:2014-02-12 23:32:01
【问题描述】:
我正在关注 Big Nerd Ranch ios 书,第 11 章。它使用 ItemsViewController 中的表格视图来显示项目列表,如果您单击一个项目,它会将控制权转移到显示详细信息的 DetailViewController关于单个项目。 DetailViewController.xib 在头文件 DetailViewController.h 中声明了这些字段的出口
__weak IBOutlet UITextField *nameField;
__weak IBOutlet UITextField *serialNumberField;
__weak IBOutlet UITextField *valueField;
__weak IBOutlet UILabel *dateLabel;
该应用程序在一定程度上运行良好。如果我单击一个项目,新视图将打开,但字段为空。因此,本教程向我们介绍了一种使用每个项目的值填充字段的方法。在引入这个新代码来填充字段后,一旦我单击一个项目以查看其详细信息,应用程序就会崩溃并出现以下错误
2014-02-12 07:18:30.720 Homepwner[3180:a0b] -[UIView setText:]: unrecognized selector sent to instance 0x89ef8c0
2014-02-12 07:18:30.724 Homepwner[3180:a0b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setText:]: unrecognized selector sent to instance 0x89ef8c0'
根据下面的代码摘录,您能否解释为什么当我单击列表中的一项以在详细视图中打开它时应用程序可能会崩溃?
这是我们提供的用于填充字段的代码 DetailViewController.m
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[nameField setText:[item itemName]];
[serialNumberField setText:[item serialNumber]];
[valueField setText:[NSString stringWithFormat:@"%d", [item valueInDollars]]];
// Create a NSDateFormatter that will turn a date into a simple date string
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
// Use filtered NSDate object to set dateLabel contents
[dateLabel setText:[dateFormatter stringFromDate:[item dateCreated]]];
// Change the navigation item to display name of item
[[self navigationItem] setTitle:[item itemName]];
}
在ItemViewController.m中,我们在这个函数中添加了中间三行,这样DetailViewController在viewWillAppear:被调用之前就有了它的项目
- (void)tableView:(UITableView *)aTableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *detailViewController = [[DetailViewController alloc] init];
NSArray *items = [[BNRItemStore sharedStore] allItems];
BNRItem *selectedItem = [ items objectAtIndex: [indexPath row]];
[detailViewController setItem:selectedItem];
[[self navigationController] pushViewController:detailViewController animated:YES];
}
【问题讨论】:
标签: ios objective-c