【问题标题】:iCloud Exception - Error importing transaction logiCloud 异常 - 导入事务日志时出错
【发布时间】:2014-03-04 15:36:14
【问题描述】:

我正在尝试将 iCloud 集成到我的一个 iOS 应用程序中。起初一切正常,但每个人都知道,然后 iCloud 停止工作,应用程序崩溃。事务日志似乎存在一些问题,但我无法确定具体来源。试图捕捉异常也是不可能的。

这是 iCloud 创建的控制台输出:

2014-02-07 10:23:45.118 MyApp[1410:3707] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](754): CoreData: Ubiquity:  mobile~5508B01E-F77F-4AF1-88DE-2E2F8DC55932:MyAppCloudDB
Using local storage: 1

2014-02-07 10:23:45.892 MyApp[1410:3707] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](754): CoreData: Ubiquity:  mobile~5508B01E-F77F-4AF1-88DE-2E2F8DC55932:MyAppCloudDB
Using local storage: 0

2014-02-07 10:24:28.632 MyApp[1410:1803] -[_PFUbiquityRecordImportOperation main](731): CoreData: Ubiquity:  Error importing transaction log: <PFUbiquityTransactionLog: 0x16177920>
transactionLogLocation: <PFUbiquityLocation: 0x160c3e80>: /var/mobile/Library/Mobile Documents/M889WYL2LY~com~example~MyApp/MyAppTransactionLogs/User~37B9682D-CED2-5F79-AF06-1FE99E7DEE9E/MyAppCloudDB/SZPp~RKudtVxEBMJzTVTupTv0WjG6i~o9Vj54dlknjc=/8AB09D17-5856-49B9-BE4C-A56451FB1EF4.1.cdt
transactionNumber: 34
, exception: *** setObjectForKey: key cannot be nil
User Info: (null)

2014-02-07 10:24:28.661 MyApp[1410:1803] -[_PFUbiquityRecordsImporter operation:failedWithError:](1003): CoreData: Ubiquity:  Import operation encountered an error: Error Domain=NSCocoaErrorDomain Code=134060 "The operation couldn’t be completed. (Cocoa error 134060.)" UserInfo=0x162a8b20 {exception=*** setObjectForKey: key cannot be nil}
userInfo: {
exception = "*** setObjectForKey: key cannot be nil";
}. While trying to import the log file at the URL: <PFUbiquityTransactionLog: 0x16177920>
transactionLogLocation: <PFUbiquityLocation: 0x160c3e80>: /var/mobile/Library/Mobile Documents/M889WYL2LY~com~example~MyApp/MyAppTransactionLogs/User~37B9682D-CED2-5F79-AF06-1FE99E7DEE9E/MyAppCloudDB/SZPp~RKudtVxEBMJzTVTupTv0WjG6i~o9Vj54dlknjc=/8AB09D17-5856-49B9-BE4C-A56451FB1EF4.1.cdt
transactionNumber: 34

2014-02-07 10:24:28.686 MyApp[1410:1803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: key cannot be nil'
*** First throw call stack:

(0x30b47e83 0x3aea46c7 0x30a82ecb 0x309dd0cb 0x3099f061 0x309a1841 0x31476aa5 0x3151a96d 0x3b38de7b 0x3b38af93 0x3b38e745 0x3b38e9c5 0x3b4b8dff 0x3b4b8cc4)
libc++abi.dylib: terminating with uncaught exception of type NSException

有人知道如何解决这个问题吗?

【问题讨论】:

  • 下载这些示例应用程序并运行它们以查看在您的环境中是否遇到与它们相同的问题。如果不是,那么您可能正在做一些可能导致问题的独特的事情。 ossh.com.au/design-and-technology/software-development/…
  • 有同样的问题,之前有很多次。我厌倦了 CoreData+iCloud。我将 60% 的开发时间用于发明变通方法以使其以某种方式工作。我现在看到这个错误的原因是(我想)更新的数据模型(轻量级迁移)。也许我的模型对于 iCloud 来说太复杂了,也许还有别的,但无论如何 - iCloud+CoreData 是开发者的地狱。
  • 嗨,贝雷克!谢谢你的评论。我添加了一个答案来分享我的解决方案:-)

标签: ios objective-c exception xcode5 icloud


【解决方案1】:

受到 berecs 对我的问题的评论的启发,我想分享对我有用的解决方案:

停止使用 iCloud!现在!放下吧!别再浪费时间做一些有成效的事情了。

我在 iCloud 2012 推出后不久就开始支持它。事实上,将 iCloud 集成到 May 应用程序中非常容易,并且在我的测试中一切正常。在我发布第一个支持 iCloud 的版本后不久,我收到了第一个用户抱怨奇怪的错误、崩溃、启动问题等。

当然,我认为我犯了一些错误,我的实现会有错误,我可以通过一些错误修复来解决问题。事实并非如此。

iCloud 就像一艘沉没的船,漏了一千次。一旦您解决了几个问题并认为现在一切正常,就会出现下一个问题。

很快我意识到问题不是我的 iCloud 实现而是 iCloud 本身。它只是行不通。我只是用它来同步我的核心数据堆栈,这简直就是地狱。也许在使用文档或简单的键值对时效果更好,但 iCloud + Core Data 是不可能的组合。

我 80% 的支持工作是由于 iCloud 相关问题。当然用户会说“这是你的错,其他应用程序使用 iCloud 没有任何问题”,但这显然不是真的。因此,您的应用会因为 iCloud 而获得大量差评只是时间问题。

去年,我从我的应用程序中删除了对 iCloud 的支持,并增加了对 Dropbox 和 Google Drive 等其他同步服务的支持。当然,这不是 iCloud 的一对一替代品(没有实时同步等),但至少这些服务可以工作!

所以摆脱这些奇怪的 iCloud 问题的最佳解决方案: 摆脱 iCloud!

我尽一切努力让它工作并花费

【讨论】:

    【解决方案2】:

    这些是 iCloud 内部异常,不幸的是,您对它们无能为力。你抓不到它们,即使你抓到了,你也没有办法处理它们。 iCloud 不够透明,当它出错时,你就会陷入困境。

    一件事可能会有很大帮助:如果您仍然在此应用中支持 iOS 6 或 iOS 5,请立即停止。在这些版本上运行时至少不支持 iCloud。在 iOS 7 上,iCloud 得到了很大的改进,虽然不完美,但不太可能出现这种问题。

    【讨论】:

    • 您好,谢谢您的提示。如果我无法捕捉到异常,我至少可以检测到它们吗?然后,当应用程序重新启动或执行其他操作(停用 iCloud 等)时,我可以显示一些消息。
    • 我在 iOS 8 上也看到了这种情况
    猜你喜欢
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2016-11-16
    • 2012-09-04
    相关资源
    最近更新 更多