Ответ 1
Я хотел предложить свое решение (основанное на решении Adam Ware).
Обычно мне не нравится просто давать код для копирования и вставки для людей, но я чувствую, что это немного исключение, так как многие люди, ныряющие в PhoneGap, ничего не знают о Objective-C (например, я).
Итак, вот что я прочитал, используя код и следуя указаниям Адама:
В моей папке плагина проекта в <project name>/Plugins/
я создал MyCDVPlugin.m
и MyCDVPlugin.h
.
Я писал на C раньше, поэтому я понимаю заголовки, но для тех из вас, кто этого не делает, он в основном говорит компилятору, что искать, поэтому мы просто рассказываем имя нашего метода и импортируем заголовок Кордовы
#import <Cordova/CDVPlugin.h>
@interface MyCDVPlugin : CDVPlugin
- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;
@end
Эти параметры являются стандартными параметрами плагина Cordova (насколько я знаю). Наша функция, как геттер, на самом деле не имеет каких-либо параметров в одном смысле, но они все еще требуются. (options
может быть необязательным? Я не тестировал.)
В нашем .m
все, что нам нужно, это фактическая функция, наш заголовок из предыдущей и CDVPluginResult.h
:
#import "MyCDVPlugin.h"
#import <Cordova/CDVPluginResult.h>
@implementation MyCDVPlugin
- (void)getVersionNumber:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options {
NSString* version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString* callbackId = [arguments objectAtIndex:0];
CDVPluginResult* pluginResult = nil;
NSString* javaScript = nil;
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:version];
javaScript = [pluginResult toSuccessCallbackString:callbackId];
[self writeJavascript:javaScript];
}
@end
В принципе, это получает номер версии и передает ее обратно в ваш обратный вызов. (Я не думал, что этот метод действительно имеет случай сбоя, поэтому он не имеет обратного вызова с ошибкой.)
Для полноты, Xcode не автообновляет файлы (что на самом деле имеет смысл), но я всегда забываю. Просто потому, что ваши файлы находятся в каталоге вашего проекта, это не значит, что они находятся в вашем проекте. Не забудьте перетащить их в свой каталог Plugins в свой проект:
Кроме того, убедитесь, что вы добавили свой плагин в запись Cordova.plist Plugins
:
Оттуда довольно просто вызвать метод из JavaScript (обязательно используйте его после запуска deviceready
):
// get and show the version number
var gotVersionNumber = function(version) {
// cache value so we can use it later if we need it
Hub.Global.Version = version;
$('.version-number').text(version);
};
// my plugin doesn't even have a failure callback, so we pass null.
// 5th param (parameters to pass into our Obj-C method) is NOT
// optional. must be at least empty array
cordova.exec(gotVersionNumber, null, "MyCDVPlugin", "getVersionNumber", []);
Что это! Просто, правильно...? Надеюсь, это поможет кому-то еще немного перегружен стороной Obj-C PhoneGap.