iPhone:UITableView,拖动表内容导致崩溃

时间:2010-03-16 17:27:36

标签: iphone cocoa-touch uitableview

我是iPhone应用程序开发的新手。我正在尝试了解如何使用UITableView。

我写了简单的代码:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1; 
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return 1 ; 
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    }
 cell.textLabel.text = @"Hello";
    return cell;
}

UITable显示内容,但如果我拖动表格内容我的应用程序终止。您可以看到视频:http://www.youtube.com/watch?v=TucTVJVhSD0

我尝试了所有的数组:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
 return 1 ; 
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

 return [hello count] ;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier] autorelease];
    }
 cell.textLabel.text = [hello objectAtIndex:indexPath.row];
    return cell;
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 [tableView deselectRowAtIndexPath:indexPath animated:NO];
 NSLog(@"Selected") ;
}



- (void) awakeFromNib
{
 hello = [[NSArray alloc] initWithObjects:@"hello", @"world", @"end", nil];
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];
}

显示内容,如果我选择的项目是:

[Session started at 2010-03-16 19:21:48 +0200.]
2010-03-16 19:21:52.295 ViewTest[1775:207] *** -[ViewTestViewController respondsToSelector:]: message sent to deallocated instance 0x3911ec0

我是iPhone编程的新手。当我看到我所做的一切 - 我只是让应用程序终止..

3 个答案:

答案 0 :(得分:1)

您的表格视图代码看起来很好。您是否在ViewTestViewController

中实施了任何其他委托方法

尝试在调试器中运行应用程序。当它崩溃时,查看堆栈跟踪。它应该提供更好的暗示。

答案 1 :(得分:0)

(1)我认为你可能已经释放了你的tableview控制器实例并在它仍在使用时将其杀死,这样当tableview向它发送一个它的委托或数据源消息时它会崩溃。

(2)或者,当您将它发送到类<时,错误消息表明您正在尝试将respondsToSelector:消息发送到ViewTestViewController的实例。 / em>的。 (-[ViewTestViewController respondsToSelector:] vs + [ViewTestViewController respondsToSelector:]“ - ”和“+”会有所不同。)

因此,在您的代码中的某个位置,可能是您的应用委托,您有代码说:

ViewTestViewController *myTableViewController= //..however you setup the controller
[myTableViewController respondsToSelector:@selector(someMethod)];

......什么时候应该......

[ViewTestViewController respondsToSelector:@selector(someMethod)];

我认为(1)最有可能。

答案 2 :(得分:-1)

感谢所有人。我发现了问题。我发现我没有将viewController IBOutlet与App Delegate连接起来。但为什么要显示View?

@interface ViewTestAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    ViewTestViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ViewTestViewController *viewController;