更改应用程序图标时出现代码=3072“操作被取消”的错误提示

19

我正在尝试在我的iOS应用程序中设置名为MyIcon备用应用图标。 我的项目包中有一个MyIcon.png图像(不在我的Assets文件夹中),并且在我的Info.plist中声明如下:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>MyIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>MyIcon</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

在我的代码中,我尝试更改应用程序图标:

UIApplication.shared.setAlternateIconName("MyIcon")
然而,图标没有改变,相反,我在控制台中收到了这个错误:
Error Domain=NSCocoaErrorDomain Code=3072 "The operation was cancelled."

我该如何解决这个问题?

2个回答

29

我之前遇到了这个错误,原因有两点:

  • 首先(可能性不高),我没有将png文件添加到项目中通过 "Add Files to 'ProjectNameFoo'" 的方式。否则它不能正常工作。添加后图标就能显示出来。
  • 其次(可能性较大),我在viewDidLoad中尝试更改图标,这也导致了错误的发生。当我像下面这段代码一样加入延迟后,无论设置多少秒都可以正常工作。
override func viewDidLoad() {
    super.viewDidLoad()

    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        UIApplication.shared.setAlternateIconName("MyIcon")
    }
}

@flyingBear,你找到这个问题的原因了吗?我的意思是为什么没有延迟就不能正常工作? - user3752049
那是我在空闲时间做的一个项目,为了展示一些东西。所以,不幸的是,之后我没有继续进行下去。但如果你找到了,请也告诉我。 - flyingBear
对于那些仍然无法解决问题的人...我不得不延迟3.0秒才能让它正常工作。 - Kai Zheng

19

我被这个错误困扰了很长时间,尝试了各种方法,但无法弄清楚我的错误在哪里。我正在从AppDelegate.application(didFinishLaunchingWithOptions:)更改图标。如上所建议,使用计时器延迟调用确实解决了它。

值得注意的是,这个问题是由于UIKit试图显示一个带有消息的UIAlertController

您已更改$(PRODUCT_NAME)的图标

但那时似乎没有起作用。您需要等待根视图控制器加载。

这是因为此API并不是为了让开发人员任意更新图标,而是为了让用户有意选择一个图标。


这应该是正确的答案。延迟解决方案是错误的。 - Pedro Paulo Amorim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接