appDelegate 中的 UIImageView 显示在模拟器中,但不在设备上

Posted

技术标签:

【中文标题】appDelegate 中的 UIImageView 显示在模拟器中,但不在设备上【英文标题】:UIImageView in appDelegate displayed in simulator, but not on device 【发布时间】:2012-07-23 13:44:29 【问题描述】:

我遇到了一个奇怪的问题:我想在我的一个应用程序中拥有一个位于其他所有控制器/视图之上的图标。我的想法是在处理内容视图的 UITabBarController 上方的主 XIB 文件(该项目在 ios-5 之前开始)中创建一个 UIImageView。

我在appDelegate的didFinishLaunchingWithOptions中添加了ImageView

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    ...
    // Add the icon view that shows current working status (working/pause)
    [self.window addSubview:self.statusIcon];
    ...

ImageView 最初是隐藏的,只有在按下按钮时才会显示。然后我将分配 UIImage 并取消隐藏它:

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[delegate.statusIcon setImage:statusIconWorking];
[delegate.statusIcon setHidden:NO];

这适用于模拟器,但不适用于设备(​​在 iPod touch 4. generation 和 iPad 3. generation (retina) 上进行了测试)。

有人可以告诉我它不是这样工作的吗?这不是图像问题(它存在于设备上,我尝试在 ImageView 中加载其他图像,这些图像在应用程序的其他部分正确显示)。

谢谢。

【问题讨论】:

【参考方案1】:

我曾观察到同样的问题,但在这里没有找到解决方案。不过,一些提示很有帮助,所以我最终确定了它。它只发生过一次,我在 xcode 版本更改几天后注意到了它。但是,我从来不知道解决方案是什么,以及这是否真的是由版本迁移引起的。

原因是图像文件不是捆绑包的一部分。检查您的边界设置。对您可能拥有的每个目标都这样做。

我的观察是:图像文件包含在模拟器的捆绑包中。它不仅从一个版本到下一个版本都保留在那里。即使我从模拟器中删除了应用程序,它也会重新安装。我这样做是使用模拟器的 gui 将其删除,就像从真实设备中删除一样,然后我手动将其从模拟器的文件系统中删除 - 只是为了确定。无论如何,该文件已重新安装。

在设备上它是不同的。创建一个 IPA 或 APP 捆绑包,就像您为 beta 测试人员所做的那样,以提交到商店。看看它。 (将文件名更改为 .zip 并解压缩可能有助于查看捆绑包。)我敢打赌,您不会在那里找到您的图像。

解决方案:仔细检查您的项目设置并确保所有资源分别正确包含在所有目标中。

【讨论】:

感谢您的帮助,但不幸的是,这不是我遇到的问题。图像文件存在于手机上,我检查了它,当我尝试在 UIImageView 中加载另一个图像时,它也不会显示。我不知道为什么它不显示,但我认为这与我想要显示图像的方式有关。

以上是关于appDelegate 中的 UIImageView 显示在模拟器中,但不在设备上的主要内容,如果未能解决你的问题,请参考以下文章

为啥 AppDelegate 中的窗口为零

appdelegate 中的 NSURLSessionDataTask

AppDelegate 中的 didFinishLaunchingWithOptions 参数是啥

UIApplication 中的窗口和 AppDelegate 中的窗口是啥关系?

从 AppDelegate 中的 ViewController 获取参数。

更新 appDelegate 中的变量