objective-c - 在Cordova插件中,使用相同的NSFileHandle对象时,EXC_BAD_ACCESS

  显示原文与译文双语对照的内容
0 0

我的Cordova插件遇到了访问问题: Cordova调用之间的NSFileHandle"失去"上下文,最后是一个收费的EXC_BAD_ACCESS,一个或者一个Unrecognized的选择器,发送到实例错误。 在 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.execstopWriting 。 错误发生在 stopWriting的最后一行。 这个问题有几次奇奇消失了,但在大多数情况下我得到了上述错误。
我的logFile 对象会无缝关闭文件,但是根据iOS文档,通常会在释放 NSFileHandle 对象时发生,当我的对象被释放时,我的对象被声明为英镑,而我的插件不应该被取消。

什么,在你的视图中,导致我的NSFileHandle 对象对实际文件进行"失去"处理?

时间:原作者:5个回答

0 0

Imho - 在函数完成作业后,日志文件被释放。 你应该将代码更改为类似

if (logFile==nil) logFile = [NSFileHandle fileHandleForWritingAtPath:@"path_to_my_file"];

或者手动保留/释放日志文件对象。

原作者:
...