【问题标题】:iOS - UILabel variable becoming (null)iOS - UILabel 变量变为(空)
【发布时间】:2011-08-02 19:53:03
【问题描述】:

我到处寻找解决我的困境的答案,我相信这是由于我难以适应 ARC - 我希望在 iOS5 上部署我的应用程序,目前正在 beta4 3GS 上对其进行测试。

当 viewController 被加载 (viewDidLoad:) 我的 app alloc init 是一个 UILabel 并自定义它以将其添加到屏幕顶部:

UIView *navHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 44)];
self.artistLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 2, 280, 15)];
artistLabel.font = [UIFont systemFontOfSize:12];
artistLabel.textColor = [UIColor grayColor];
artistLabel.backgroundColor = [UIColor clearColor];
artistLabel.textAlignment = UITextAlignmentCenter;
[navHeaderView addSubview:artistLabel];

self.navigationBar.topItem.titleView = navHeaderView;

好的,这可以正常工作并通过访问 updateTrack 方法填写相关细节:

- (void)updateTrack 
{
    _player = [MPMusicPlayerController iPodMusicPlayer];
    _item = [_player nowPlayingItem];

    self._artistString = [_item valueForProperty:MPMediaItemPropertyArtist];

    self.artistLabel.text = self._artistString;
}

当使用 NSNotifications 更改音乐播放时调用此方法。然而,artistString UILabel 现在是(null)。我不明白为什么该属性已被释放 - 它在头文件中设置了一个非原子的强属性,并在 .m 文件的顶部合成。

也许我还应该补充一点,一旦应用程序成功加载,我分配给 UIImageView 的 IBOutlet 的非原子强属性也会变为(null),显示专辑封面一次(即,这不是作为子视图添加的)。

任何帮助将不胜感激:D

【问题讨论】:

  • 这可能与iOS5无关,所以我在评论。查看属性声明会有所帮助。我怀疑 valueForProperty 调用返回 nil。在单独的说明中, self._artistString 只是读错了(不应该是下划线),我希望 self.artistLabel = [[UILabel alloc] ... 保留过多。

标签: ios cocoa-touch ios5 uikit


【解决方案1】:

我发现我的问题不是我使用的变量的 ARC。相反,App Delegate 中的通知设置没有与 IBOutlets / ViewController 的 UILabel 正确通信。很抱歉给大家带来痛苦。

【讨论】:

    【解决方案2】:

    这与作为测试版 iOS 无关。

    在您的标题中,您是否定义了UILabel 以及使用@property / @synthesize

    另外,从标签中删除self.

    【讨论】:

      【解决方案3】:

      iOS5 仍处于保密协议下。如果您是注册开发者,请在测试版 Apple 论坛中提问。

      【讨论】:

      • 你好。然而我问了无济于事。感谢它仍在保密协议下,但也许我的错误不是 iOS5 特定的问题,我只是假设。
      • 嗨,Ben,我并不是说这听起来很粗鲁,但大多数开发人员都非常注意保密协议,尤其是当他们来自 Apple 时。即使这个问题不是特定于 iOS5,它仍然是一个 iOS5 问题,在这里不能合法地回答。我可以建议使用标准内存管理在 iOS4 中重写并查看它是否有效吗?这样您就可以隔离操作系统差异,并可能在此处获得有用的响应。
      • 或在此处发布指向您创建的 Apple 开发者论坛主题的链接,以便此问题的访问者可以在此处回答,如果他们不愿意打破 NDA。
      • 谢谢各位。我开始重写 iOS4,然后意识到这是 NSNotificationCenter 代码的问题。通知是在主 View Controller 内的 App Delegate 调用方法中设置的。但是视图控制器中的方法无法与变量连接。
      • 我应该感谢您的宝贵时间,这是一个愚蠢的错误,我不会再犯了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多