【发布时间】:2013-07-24 08:27:20
【问题描述】:
我在 Cordova 插件中遇到访问问题:我的 NSFileHandle 在 Cordova 调用之间“丢失”上下文,我最终得到 EXC_BAD_ACCESS、SIGABRT 或 Unrecognized Selector sent to instance 错误。在 Obj-C 的文档中进行调试和挖掘并没有给我任何线索,因此非常感谢您的帮助!
这是我的代码。首先——界面:
@interface MyPlugin : CDVPlugin
...
- (void) startWriting:(CDVInvokedUrlCommand*)command;
- (void) stopWriting:(CDVInvokedUrlCommand*)command;
@end
以及实现:
....
static NSFileHandle *logFile;
@implementation MyPlugin
- (void) startWriting:(CDVInvokedUrlCommand*)command{
logFile = [NSFileHandle fileHandleForWritingAtPath:@"path_to_my_file"];
NSData nsData = [@"Hello World!" dataUsingEncoding:NSUTF8StringEncoding];
[logFile writeData:nsData];
}
- (void) stopWriting:(CDVInvokedUrlCommand*)command{
NSData nsData = [@"Goodbye World!" dataUsingEncoding:NSUTF8StringEncoding];
[logFile writeData:nsData];
}
我调用startWriting,然后使用cordova.exec 调用stopWriting。错误发生在stopWriting 的最后一行。有几次问题奇迹般地消失了,但在大多数情况下,我遇到了上述错误之一。
我的 logFile 对象似乎无缝关闭了文件,但根据 iOS 文档,这通常发生在 NSFileHandle 对象被释放时,而我的对象被声明为 static,并且不应该只要我的插件存在就被释放(另外,我在 XCode 调试器中看到它仍然被分配)。
在您看来,是什么导致我的 NSFileHandle 对象“丢失”了实际文件?
【问题讨论】:
-
您的意思是说我的问题的根源是未知的吗?因为我调试了代码并且一遍又一遍地在同一行
[logFile writeData:nsData]上失败。我确定这是有问题的行,因为stopWriting是我按下按钮的结果。 -
我不知道什么是真正的问题,但我只是想帮助你 :) 谢谢 :)
-
谢谢!那么,如果我已经知道哪一行出现故障并且
logFile对象在该行中不是 nil,那么您认为我可以从您粘贴的链接中提供的 DebugConsole 中获益吗?
标签: objective-c cordova nsfilehandle