我在我的 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
,然后stopWriting
使用cordova.exec
. 错误发生在最后一行stopWriting
。有几次问题奇迹般地消失了,但在大多数情况下,我遇到了上述错误之一。
似乎我的logFile
对象无缝关闭了文件,但根据 iOS 文档,这通常发生在NSFileHandle
对象被释放时,而我的对象被声明为static,并且只要我的插件存在(另外,我在 XCode 调试器中看到它仍然被分配)。
在您看来,是什么导致我的NSFileHandle
对象“丢失”了实际文件?