2012-04-23 3 views
0

У меня есть следующий код в моем методе didSelectRowAtIndexPath делегата:Проблемы с указателями

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    Exercise *exerciseView = [[Exercise alloc] initWithNibName:@"Exercise" bundle:nil]; //Makes new exercise object. 

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    NSString *str = cell.textLabel.text; // Retrieves the string of the selected cell. 

    exerciseView.exerciseName.text = str; 

    NSLog(@"%@",exerciseView.exerciseName.text); 

    [self presentModalViewController:exerciseView animated:YES]; 
} 

В этом, я стараюсь взять текст выбранной ячейки и установите IBOutlet UILabel exerciseName в этой строке.

Мой метод компилируется, но когда я запускаю NSLog, который печатает текстовое значение UILabel после установки его на str, он возвращает null. Я чувствую, что это проблема указателя, но, похоже, не может понять этого. Может ли кто-нибудь прояснить ситуацию?

+0

, а когда вы NSLog str, вы не получите нуль? Вы используете ARC? – shein

+0

См. Мой комментарий в другом подобном вопросе. – danh

ответ

1

Проблема заключается в полуинтерминированном контроллере. Необходимо создать его, прежде чем вы начнете содержимое подвью.

Exercise.h

@property(strong, nonatomic) NSString *theExerciseName; // assuming ARC 

- (id)initWithExerciseName:(NSString *)theExerciseName; 

Exercise.m

@synthesize theExerciseName=_theExerciseName; 

- (id)initWithExerciseName:(NSString *)theExerciseName { 

    self = [self initWithNibName:@"Exercise" bundle:nil]; 
    if (self) { 
     self.theExerciseName = theExerciseName; 
    } 
    return self; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    exerciseName.text = self.theExerciseName; 
} 

вызовов, что новый инициализатор из метода didSelect.

Exercise *exerciseView = [[Exercise alloc] initWithExerciseName:str]; 

Но пожалуйста, что ул используя логику в cellForRowAtIndexPath, не называя его.

+0

Это имеет смысл. Благодаря! – TopChef

+0

Могу ли я спросить, что означает эта линия? @synthesize theExerciseName = _theExerciseName; – TopChef

+0

Несомненно, это создает getter и setter для свойства и дает ему псевдоним, поэтому он не сталкивается с переменными стека и параметрами (см., Как параметр init имеет одно и то же имя, но не содержит предупреждения компилятора). – danh

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