【问题标题】:Can't populate object property in uiviewcontroller on iPhone无法在 iPhone 上的 uiviewcontroller 中填充对象属性
【发布时间】:2009-08-27 18:33:43
【问题描述】:

我有一个具有两个属性的 uiviewcontroller:trackName 和 playerObject。 PlayerObject 也有一个 trackName 属性。我使用以下代码从我的主 uiviewController 调用此 uiviewcontroller:

SecondaryViewController *nextViewController = [[SecondaryViewController alloc] initWithNibName:@"SecondaryViewController" bundle:nil];
NSString *trackName = @"a track";
nextViewController.trackName = trackName;
[self.navigationController pushViewController:nextViewController animated:YES];
[nextViewController release];

在 SecondaryViewController 中,我重写了 initwithnibname 方法来设置 playerObject 的 trackName。我用这段代码来做这个:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
    playerObject.trackName = trackName;
}
playerObject.trackName = trackName;
return self;

}

最后,我的 playerObject 拥有了 SecondaryViewController 需要的所有视图数据。它看起来像:

- (void)awakeFromNib{
NSString *s = trackName;
    //more code relevant to the the view controller
}

当我调试时, playerObject 中的 trackName 字符串为零。我假设我做错了什么。如何使用我最初在主 uiview 控制器中传递的 trackName 填充此值?

【问题讨论】:

    标签: iphone cocoa-touch uiviewcontroller


    【解决方案1】:

    好像在你初始化viewController的时候playerObject变量还没有被设置,这可能吗?

    【讨论】:

    • Daniel,我可以在secondaryviewcontroller中的initwithnibname之外的其他方法中设置trackName吗?如果有,用什么方法?
    • 我不知道您使用此 t rackName 的目的是什么,您可以在视图中设置它是否加载或类似的东西?您必须在分配播放器对象后设置它
    • secondaryviewcontrol 不进行加载。与视图有关的一切都在播放器对象类中完成。 trackname 无关紧要,我只需要在原始 mainviewclass 的对象中设置一个属性。
    【解决方案2】:

    这有时会在您覆盖 initWithNibName:bundle: 时发生。

    改为使用 viewDidLoad 进行设置。 Apple 保证在调用此方法之前执行所有必需的设置(而不是 initWithNibName:bundle: 的情况)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多