выберите ячейку из UITableView и перейдите к другому UITableView

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

у меня всегда ошибка в этой части

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SubSiteCellDetail"];
    cell.textLabel.text = [ListDetailSubSite objectAtIndex:indexPath.row]; //this always give me the error
    return cell;
}

вот как я создаю список данных

ListDetailSubSite = [NSMutableArray arrayWithCapacity:10];
SubSite *detailSubSite = [[SubSite alloc] init];
detailSubSite.sSubSiteName = [subsite.sSubSiteName stringByAppendingString:@"1"];
[ListDetailSubSite addObject:detailSubSite];


detailSubSite = [[SubSite alloc] init];
detailSubSite.sSubSiteName = [subsite.sSubSiteName stringByAppendingString:@"2"];
[ListDetailSubSite addObject:detailSubSite];

вот как я перехожу от UITableView к другому UITableView.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"ShowSubSiteDetail"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        SubSite *subsetSelected = [ListSubSite objectAtIndex:indexPath.row];
        [[segue destinationViewController] setSubsite:subsetSelected];
    }
}

это моя ошибка выглядит так

2012-10-29 15:18:11.127 UniversalStoryBoard[5256:f803] -[SubSite isEqualToString:]: unrecognized selector sent to instance 0x9355340
2012-10-29 15:18:11.129 UniversalStoryBoard[5256:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SubSite isEqualToString:]: unrecognized selector sent to instance 0x9355340'
*** First throw call stack:
(0x13ce022 0x155fcd6 0x13cfcbd 0x1334ed0 0x1334cb2 0x1580ff 0x4fb1 0xb2c54 0xb33ce 0x9ecbd 0xad6f1 0x56d21 0x13cfe42 0x1d86679 0x1d90579 0x1d154f7 0x1d173f6 0x1d16ad0 0x13a299e 0x1339640 0x13054c6 0x1304d84 0x1304c9b 0x12b77d8 0x12b788a 0x18626 0x1fcd 0x1f35)
terminate called throwing an exception

вот картинка:

Изображение

класс SubSite.h

#import <UIKit/UIKit.h>

@interface SubSite : NSObject
@property (nonatomic, copy) NSString *sSubSiteName;

@end

класс SubSite.m

#import "SubSite.h"

@implementation SubSite
@synthesize sSubSiteName;

@end

кто-нибудь может помочь мне решить эту проблему? Спасибо.


person Alfred Angkasa    schedule 29.10.2012    source источник


Ответы (3)


Проблема может заключаться в том, что в cell.textLabel.text = [ListDetailSubSite objectAtIndex:indexPath.row]; ячейка ожидает строку, а не объект ListDetailSubSite.

Аналогичная ошибка была решена в этой ссылке:

Почему я получаю ошибку isEqualToString в этом Cocoa код?

Поскольку вы упомянули, что создали классы Subsite, вы можете попробовать этот метод. В основном вам нужно убедиться, что вход в cell.textLabel.text является объектом NSString.

person Coder    schedule 29.10.2012
comment
привет, спасибо за ваш ответ .. это действительно полезно. еще раз спасибо. :) - person Alfred Angkasa; 29.10.2012

Какую ошибку вы нашли? а ты пробовал это

cell.textLabel.text = [NSString stringWithFormat @"%@",[ListDetailSubSite objectAtIndex:indexPath.row]];

Я думаю, что проблема возникает из-за того, что cell.textlable.text принимает NSString, поэтому вам нужно передать свой объект

Вы можете сделать это вместо

Subset *tmp = [ListDetailSubSite objectAtIndex:indexPath.row];
cell.textLabel.text = [NSString stringWithFormat:@"%@",tmp.sSubSetName];
person usergio2    schedule 29.10.2012
comment
привет, спасибо за ваш ответ. почти решил, но почему вывод похож на адрес памяти? как я могу получить текст из indexpath.row? Спасибо. - person Alfred Angkasa; 29.10.2012
comment
да, SubSite — это класс. Я добавлю в класс SubSite. - person Alfred Angkasa; 29.10.2012
comment
Я улучшаю свой ответ, надеюсь, это поможет - person usergio2; 29.10.2012
comment
привет, спасибо за ваш ответ. я уже решил. я голосую за ваш ответ. Спасибо. - person Alfred Angkasa; 29.10.2012

cell.textLabel.text = [ListDetailSubSite objectAtIndex:indexPath.row]

следует заменить на

cell.textLabel.text = [[ListDetailSubSite objectAtIndex:indexPath.row] sSubSiteName] 
person tassar    schedule 29.10.2012
comment
привет, спасибо за ваш ответ. а если честно, какая разница? я имею в виду твой ответ. - person Alfred Angkasa; 29.10.2012
comment
извините, ошибся, сейчас исправлю. надеюсь, не ввел вас в заблуждение - person tassar; 29.10.2012
comment
привет, все в порядке .. не беспокойтесь. Я голосую за ваш ответ, потому что ваш ответ тоже правильный .. спасибо. :) - person Alfred Angkasa; 29.10.2012