2012-07-12 77 views
1

我想编码一个简单的表视图>详细的应用程序开始熟悉obj-c。我使用字典popolate表,比单击我到一个空白详细视图的单元格。这项工作(我自豪地说)。当我尝试将信息发送到详细视图时,情况会变得很糟糕,下面是我得到的调试错误:xcode的第一步 - 表视图问题

2012-07-12 14:32:41.906 StoryboardTutorial [79624:f803] - [UIView setText:]:unrecognized选择发送到实例0x6eae8d0

2012-07-12 14:32:41.908 StoryboardTutorial [79624:F803] 终止应用程序由于未捕获的异常 'NSInvalidArgumentException',原因:“ - [UIView的的setText:]:无法识别选择器发送到实例0x6eae8d0' *

* *第一掷调用堆栈: (0x13ca022 0x155bcd6 0x13cbcbd 0x1330ed0 0x1330cb2 0x2d41 0xdba1e 0xdbd11 0xed8fd 0xedaef 0xeddbb 0xee85f 0xeee06 0xc8a852d 0xeea24 0x27bd 0xa55c5 0xa57fa 0x93a85d 0x139e936 0x139e3d7 0x1301790 0x1300d84 0x1300c9b 0x12b37d8 0x12b388a 0x14626 0x1c4d 0x1bb5为0x1) 终止叫做抛出异常(LLDB)

和这里的一些代码块:

DetailViewController.h

// DetailViewController.h 

#import <UIKit/UIKit.h> 

@interface DetailViewController : UIViewController{ 
    NSString *city; 
    NSString *state; 
    IBOutlet UILabel *cityLabel; 
    IBOutlet UILabel *stateLabel; 
} 

@property (nonatomic,retain) NSString *city,*state; 
@property (retain,nonatomic) IBOutlet UILabel *cityLabel,*stateLabel; 


@end 

DetailViewcontroller.m

// DetailViewController.m 

#import "DetailViewController.h" 

@implementation DetailViewController 
@synthesize city,state,cityLabel,stateLabel; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
    stateLabel.text = state; 
    cityLabel.text = city; 

} 

ViewController.m

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    DetailViewController *detail = [self.storyboard instantiateViewControllerWithIdentifier:@"detail"]; 
    detail.city = [dataSource objectAtIndex:indexPath.row]; 
    detail.state = [states objectForKey:detail.city]; 
    [self.navigationController pushViewController:detail animated:YES]; 
    UITableViewCell *cell; 
    cell = [tableView cellForRowAtIndexPath:indexPath]; 
    cell.textLabel.shadowColor = [UIColor clearColor]; 
} 


- (void)setupArray{ 
    states = [[NSMutableDictionary alloc] init]; 
    [states setObject:@"Roma" forKey:@"Lazio"]; 
    [states setObject:@"Milano" forKey:@"Lombardia"]; 

    dataSource = [states allKeys]; 
} 
+0

我真的不明白什么ü在didSelectRowAtIndexPath方法在做什么。并且cellForRowAtIndexPath在哪里...使用异常断点它会给你确切的点,在这之后,你的应用程序崩溃 – WaaleedKhan 2012-07-12 12:45:45

+0

我不认为你了解cellForRowAtIndexPath的用法。根据它的实现,你可以使用它,但我怀疑这一点。但是,一步一步调试并找出错误发生在哪一行。应该有一个文本属性(因此一个setText方法)的一些对象变成了一个UIView对象。这有点奇怪。原因可能是一些不适当的类型转换或者甚至是一些内存分配错误,这些巧合地解决了UIView在哪里(预期分配的)UILable。 Enalbe僵尸找出是否有一些内存分配。发生错误。 – 2012-07-12 12:56:58

+0

使用下面的代码创建用户DetailViewController对象。 DetailViewController * detail = [self.storyboard instantiateViewControllerWithIdentifier:@“detail”]; – 2012-07-12 13:20:09

回答

1

UIView没有setText方法。该UIView你在跟谁说话需要有一个属性text为了有一个方法setText

该错误是最有可能在这些线路

stateLabel.text = state; 
cityLabel.text = city; 

其中的一个的一个切不可类型您认为它的对象(又名UIView而不是UILabel)。除非你在其他地方打电话setText

尝试将其更改为

if ([stateLabel isKindOfClass:[UILabel class]]) stateLabel.text = state;  
if ([cityLabel isKindOfClass:[UILabel class]]) cityLabel.text = city; 
+0

好的,但我使用'stateLabel.text =状态;'与'IBOutlet UILabel * stateLabel' ... – 2012-07-12 12:47:44

+0

更新了答案。你也确定这是你说'text'或'setText'的唯一地方吗? – Dustin 2012-07-12 12:50:41

+0

不,我不会在其他地方调用'setText' ...我应该如何设置标签文本?以及为什么它们不是在.h中声明的'UILabel'? – 2012-07-12 12:51:12