【发布时间】:2013-09-17 15:37:15
【问题描述】:
在 PhoneGap 应用程序中,我试图从我的 .m Objective C 文件中返回一行 JavaScript。我可以对一个变量毫无问题地这样做,但另一个变量会默默地失败。 NSString 变量 *text 的声明方式似乎有些矛盾,但我是 Objective C 的新手,无法判断代码有什么问题。请参阅下面的代码。
- (void)umSwipe_receivedSwipe:(NSNotification *)notification {
NSLog(@"umSwipe_receivedSwipe called");
NSData *data = [notification object];
NSString *text = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
// FAIL: This fails silently
NSString* orig = [NSString stringWithFormat:@"alert('%@')", text];
[super writeJavascript:orig];
// This works great
NSString* someVar = @"B1234221012341234^LAST/FIRST^151710100000000099000000?;1234221012341234=15171010000000099?";
NSString* concat = [NSString stringWithFormat:@"alert('%@')", someVar];
[super writeJavascript:concat];
}
作为背景,这是在 iPad 上使用UniMag Magnetic Strip scanner。
当一个变量包含相同的字符数据时,为什么一个变量会起作用而另一个不起作用?如何将此变量合并到我在 iOS PhoneGap 应用程序中发送到 JavaScript 的字符串中?
顺便说一句,如果答案中有更正的代码,而不仅仅是指向某物的链接,我更有可能欣赏和理解答案。
谢谢。
编辑:所以我发现该错误是 JavaScript 错误。仍然不确定到底是什么问题,但是 NSString 变量中必须有某种不可见的字符,这会扼杀 JS 体验。也许当我 NSLog 时没有显示换行符...?
【问题讨论】:
-
当你
NSLogdata在`NSData *data = [通知对象];`之后得到什么? -
它崩溃了:2013-09-17 13:00:59.254 HelloWorld[490:707] -[NSConcreteMutableData getCharacters:range:]:无法识别的选择器发送到实例 0x271780 2013-09-17 13:00 :59.256 HelloWorld[490:707] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSConcreteMutableData getCharacters:range:]: 无法识别的选择器发送到实例 0x271780”
-
如果我 NSLog(text) 我得到以下信息:B1234221012341234^LAST/FIRST^151710100000000099000000?;1234221012341234=15171010000000099?
-
...虽然是真实的 CC 数据。当然,我不会在这里发布。
标签: javascript ios objective-c cordova