2014-01-02 3 views
0

Я новичок в программировании на ios. У меня есть статический tableViewController, в котором у меня есть 3 ячейки. У меня есть другой контроллер представления, где есть метка и описание. то, что я пытаюсь сделать, это обнаружить ячейку, которую пользователь нажимает, а затем изменить метку, которая находится на моем втором контроллере представления, в соответствии с этим, но проблема возникает, когда я нажимаю на ячейку, программа сбой и добавляет точку остановаIOS Segue - обнаружение ячейки таблицы и открытие viewController

здесь мой код

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
     NSString *name; 
     NSString *description; 

    if([[segue identifier] isEqualToString:@"PushAppDetailsFromCell1"]) 
    { 
     name = @"Label 1 "; 
     description = @"Long description of Label 1..."; 
    } 

    else if([[segue identifier] isEqualToString:@"PushAppDetailsFromCell2"]) 
    { 
     name = @"Label 2"; 
     description = @"Long description of Label 2..."; 

    } 
    else if([[segue identifier] isEqualToString:@"PushAppDetailsFromCell3"]) 
    { 
     name = @"Label 3"; 
     description = @"Long description of Label 3..."; 
    } 
     else { 
      return; 

} 
     AppDetailsViewController *apDetailsViewController = 
     segue.destinationViewController; //here i am getting the breakpoint 
     apDetailsViewController.appDetails = 
     [[AppDetails alloc] initWithName:name description:description]; 

} 

AppDetails.m

-(id)initWithName:(NSString *)name description:(NSString *)descr{ 

    self = [super init]; 

    if(self){ 
     self.name = name; 
     self.description = descr; 

     } 
    return self; 
} 

AppDetailsViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.nameLabel.text = self.appDetails.name; 
    self.descriptionLabel.text = self.appDetails.description; 

} 
+0

is appDetails Вид сохраненной недвижимости в AppDetailsViewController? Сделайте это @property (сильный, неатомный) AppDetails * appDetails; – cjd

+0

Да, это уже так ... Я объявил это же – hellosheikh

+0

вы уверены, что приложение рушится - (void) prepareForSegue: (UIStoryboardSegue *) segue отправитель: (id) отправитель? – cjd

ответ

0
NSArray *names = @[@"Label 1", @"Label2", @"Label 3"]; 
NSArray *descs = @[@"Description 1", @"Description", @"Description 3"]; 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"PushAppDetailsSegue"]) { 
     NSIndexPath *indexPath = [self.yourTableView indexPathForSelectedRow]; 
     AppDetailsViewController *controller = segue.destinationViewController; 
     controller.appDetails = [[AppDetails alloc] initWithName:names[indexPath.row] description:descs[indexPath.row]]; 
    } 
} 

Перетащите переход от вашего ViewController к SecondViewController и назовите его "PushAppDetailsSegue".

1

Связать с UIViewController с UIViewController, а не с ячейкой UIViewController. Внесите следующий код для навигации.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"%ld",aIntSelected); 
    NSLog(@"%@",segue.destinationViewController); 
} 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    aIntSelected=indexPath.row; 
    NSLog(@"didSelectRowAtIndexPath called"); 
    [self performSegueWithIdentifier:@"pushSecond" sender:self]; 

} 
+0

Здесь из aIntSelected. Вы увидите, какая строка выбрана. – cjd

+0

Да, спасибо, я знаю, я могу сделать это, используя метод didselectrow, но я хочу знать, в чем проблема в моем коде .. почему он не работает должным образом. – hellosheikh

+0

Я следую учебнику из книги, и я написал точный код – hellosheikh

2

шаги, чтобы выяснить проблему

1) Поставьте точку останова в prepareForSegue

2) Постарайтесь, чтобы он отображает правильный SEGUE идентификатор, как это должно быть (там может быть сделать орфографическую ошибку).

3) увидеть, где это сбой в

- In prepareForSegue? 
- Is this calling initname()? 
- has it started it viewDidLoad(). 

Если вы сделаете это в основном вы будете выяснить, в чем проблема. Если вы не можете, то дайте мне знать.

Смежные вопросы