我正在制作iOS Action App Extension
,并且在monotouch中调用finalize()
方法后,我无法访问javascript文件中CompleteRequest
函数中的数据。我的javascript文件中的run()方法运行正常,因为我能够像apple documentation一样获取页面网址。
这是我的代码:
NSDictionary itemData = new NSDictionary(new NSString("bgColor"),new NSString("red"));
var resultsDictionary = new NSDictionary(NSJavaScriptExtension.FinalizeArgumentKey, itemData);
var resultsProvider = new NSItemProvider(resultsDictionary, "kUTTypePropertyList");
var resultsItem = new NSExtensionItem();
resultsItem.Attachments = new NSItemProvider[] { resultsProvider };
ExtensionHelper.ExtensionContext.CompleteRequest(new NSExtensionItem[] { resultsItem }, null);
在我的javascript文件中:
var MyExtensionJavaScriptClass = function() {};
MyExtensionJavaScriptClass.prototype = {
run: function(arguments) {
// This works completely fine
arguments.completionFunction({"baseURI": document.baseURI});
},
finalize: function(arguments) {
console.log(arguments["bgColor"]); // Undefined
document.body.style.backgroundColor = arguments["bgColor"];
}
};
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;
当我将finalize函数的arguments变量转储到控制台时,它看起来像一个空对象:
Object
__defineGetter__: function __defineGetter__() {
__defineSetter__: function __defineSetter__() {
__lookupGetter__: function __lookupGetter__() {
__lookupSetter__: function __lookupSetter__() {
constructor: function Object() {
hasOwnProperty: function hasOwnProperty() {
isPrototypeOf: function isPrototypeOf() {
propertyIsEnumerable: function propertyIsEnumerable() {
toLocaleString: function toLocaleString() {
toString: function toString() {
valueOf: function valueOf() {
__proto__: Object
这里是模拟器system.log包含的内容:
MobileSafari[64987]: completed request - items: (
"<NSExtensionItem: 0x7d798940> - userInfo: {\n NSExtensionItemAttachmentsKey = (\n \"<NSItemProvider: 0x7d78f910> {types = (\\n kUTTypePropertyList\\n)}\"\n );\n}"
)
答案 0 :(得分:3)
显然,Xamarin.iOS documentation on app extensions有一些无效的代码。
如果您查看Swift中的几个示例,则可以看到他们不使用"kUTTypePropertyList"
作为标识符,但使用常量kUTTypePropertyList
。通过一些研究,我发现了Xamarin中的等价物:MobileCoreServices.UTType.PropertyList
。更换它将解决问题。