Цель C: невозможно присвоить значение меткам - PullRequest
0 голосов
/ 20 апреля 2011

Я пытаюсь получить доступ к свойствам объекта (firstName человека), который хранится в массиве, и назначить его меткам в отдельном контроллере представления (SplitMethodViewController). Значение имени успешно назначено здесь. Фрагмент кода, как показано ниже:

В контроллере начального вида (до отображения контроллера модального вида, содержащего UILabel):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int row = [indexPath row];
    Person *thisPerson = (Person *)[self.personArray objectAtIndex:row];

    SplitMethodViewController *smvc = [[SplitMethodViewController alloc]initWithNibName:nil bundle:nil];
    smvc.nameLabel.text = [[NSString alloc] initWithFormat:@"%@", thisPerson.firstName];

    //This lines returns the value I want, showing that assignment is working till this point
    NSLog(@"The name label is %@", smvc.nameLabel.text);

    [self presentModalViewController:smvc animated:YES];

    [smvc release];

}

Однако значения становятся пустыми, когда я проверяю в splitMethodViewController (проверяется в методе ViewDidLoad)

@interface SplitMethodViewController : UIViewController 
{
    UILabel *nameLabel;
}

@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
@end

@implementation SplitMethodViewController

@synthesize nameLabel;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization.
    self.nameLabel = [[UILabel alloc] init];
    }
    return self;
}

- (id)init 
{
    return [self initWithNibName:nil bundle:nil];
}
- (void)viewDidLoad 
{
    //name label returning nothing here.
    NSLog(@"namelabel is %@",self.nameLabel.text);

    [super viewDidLoad];
}
@end

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

Любая помощь будет оценена!

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Вы фактически выделяли и создавали nameLabel и evenBillAmountLabel после создания экземпляра SplitMethodViewController?В Objective-C сообщения (вызовы методов) могут отправляться в ноль (несуществующие объекты) без возврата каких-либо ошибок, но также без каких-либо результатов.

Убедитесь, что метод -init включен SplitMethodViewController выглядит примерно так:

// this is the designated initializer of most view controllers, 
// do initialization here ...
- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 
{
    self = [super initWithNibName:nibName bundle:nibBundle]; 
    if (self)
    {
        nameLabel = [[UILabel alloc] init];
        evenBillAmountLabel = [[UILabel alloc] init];
        // add other stuff you need to initialize ...
    }
    return self;
}

- (id)init 
{
    // since we don't wanna re-implement allocation and instantiation for every 
    // initializer, we call the 'designated initializer' with some default values,
    // in this case the default nibName and bundle are nil.
    return [self initWithNibName:nil bundle:nil];
}

- (void)dealloc 
{
    [nameLabel release];
    [evenBillAmountLabel release];
    [super dealloc];
}

Обязательно прочитайте о назначенных инициализаторах, если это ново для вас и связано ли это с вашей проблемой. Вот ссылка на документацию Apple по теме.

1 голос
/ 20 апреля 2011

Если ответ Вольфганга не решает проблему, убедитесь, что ваши UILabel ссылки в файле SplitMethodViewController.xib подключены к правильному выходу ссылки в файле SplitMethodViewController.h.

...