У меня возникла проблема с доступом в моем плагине Cordova: мой NSFileHandle
"теряет" контекст между вызовами Cordova, и я получаю либо EXC_BAD_ACCESS, SIGABRT, либо < strong>Неопознанный селектор отправлен экземпляру. Отладка и копание в документации 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
«терять» настоящий файл?
[logFile writeData:nsData]
. Я уверен, что это проблемная строка, потому чтоstopWriting
вызывается в результате нажатия мной кнопки. - person Warm Chocolate   schedule 24.07.2013logFile
не nil в этой строке? - person Warm Chocolate   schedule 24.07.2013