iPhone: UITableView, перетаскивание содержимого таблицы вызывает сбой - PullRequest
0 голосов
/ 16 марта 2010

Я новичок в разработке приложений для 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 ]

1 голос
/ 16 марта 2010

Ваш код представления таблицы выглядит хорошо. Вы реализовали какие-либо другие методы делегата в ViewTestViewController?

Попробуйте запустить приложение в отладчике. Когда он падает, посмотрите на трассировку стека. Это должно дать лучшую подсказку.

0 голосов
/ 16 марта 2010

Спасибо всем. Я нашел проблему. Я обнаружил, что не связал viewController IBOutlet с App Delegate. Но почему был показан вид?

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

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ViewTestViewController *viewController;
0 голосов
/ 16 марта 2010

(1) Я думаю, что вы, возможно, выпустили свой экземпляр контроллера табличного представления и уничтожили его, пока он еще использовался, так что когда табличное представление отправляет ему одно из своих сообщений делегата или источника данных, оно падает.

(2) В качестве альтернативы в сообщении об ошибке говорится, что вы пытаетесь отправить сообщение respondsToSelector: в экземпляр ViewTestViewController, когда вы должны отправить его в класс . (-[ViewTestViewController respondsToSelector:] против + [ViewTestViewController respondsToSelector:] "-" и "+" имеют значение.)

Итак, где-то в вашем коде, вероятно, в делегате приложения, у вас есть код, который говорит:

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

... когда ты должен был ...

[ViewTestViewController respondsToSelector:@selector(someMethod)];

Я думаю, (1) наиболее вероятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...