我有一個iOS共享分機,需要打開的網頁的URL。一切都很好,特別是在模擬器中。但在真實設備上我有大約20-30%的情況下,擴展沒有接收到任何數據,即:iOS共享分機不接收來自Safari的數據
NSExtensionItem *inputItem = self.extensionContext.inputItems.firstObject;
NSItemProvider *item = inputItem.attachments.firstObject;
[item loadItemForTypeIdentifier:(NSString *)kUTTypePropertyList options:nil completionHandler:^(NSDictionary *item, NSError *error) {
// here the error is sometimes not nil and thus the _baseURI ends up nil
_baseURI = [item[NSExtensionJavaScriptPreprocessingResultsKey] objectForKey:@"baseURI"];
}];
錯誤代碼是-100與描述「沒有可用的請求類型標識符項目。 「。這主要發生在我連續多次打開擴展而不更改/刷新Safari中的網頁時。在這些情況下,我看到一個設備日誌「iPhone內核[0]:Sandbox:MobileSafari(7033)deny(1)file-read-data/private/var/containers/Bundle/Application/... /bundle.js「其中bundle.js
是javascript與ExtensionPreprocessingJS
對象。該bundle.js
聲明ExtensionPreprocessingJS
對象是這樣的(提取的相關部分):
ExtensionPreprocessingJS = {
run: function(arguments){
arguments.completionFunction({
"baseURI": document.baseURI
})
},
finalize: function(arguments){
}
}
在這種情況下,它可能一段時間發生的分機時,下一次打開Safari中的份額對話框關閉,顯示了我的擴展與沒有圖標。這發生在我測試iPhone 5s和iOS 6.0的iPhone 6上。
我認爲缺少的數據是因爲系統無法讀取擴展的JavaScript文件,但爲什麼會發生這種情況?
我剛試過這個,它的行爲完全一樣,* item *爲零。 – shelll
當您多次打開和關閉擴展時,擴展的新實例不會每次都被實例化。事實上,擴展仍然存在並被重新使用,這可能是您問題的根源。 – Vamos
即使擴展程序存在,Safari/iOS爲什麼不將數據發送到擴展名?這沒有任何意義,它打破了應用程序。我確認我可以將最後一個*項*保存在下一個擴展開始之後的靜態變量中。這對於快速返回到擴展是一個很好的回退。如果需要,我會稍後將其保存到用戶默認值中。謝謝。如果你用這個「黑客」擴展你的答案,我會接受它。 – shelll