NSFileHandleDataAvailableNotification只发送一次

时间:2015-06-25 20:55:35

标签: objective-c cocoa

在我的应用中,我设置了一个NSFileHandle来(尝试)更新时读取文件。但是,我第一次修改文件时只收到一个通知。从waitForDataInBackgroundAndNotify的子类调用NSApplication,因此有一个活动的runloop。我认为唯一可能影响此问题的问题是,编写文件的过程使用NSDictionary writeToFileatomically:true。这是一个问题吗? 我错过了别的什么吗?

FWIW,我可以用runloop中的计时器替换通知,然后以这种方式读取文件。有点挫败了回调的目的......

设置fileHandle

- (void)setupRead:(id)sender
{
    self.fileHandle = [NSFileHandle fileHandleForReadingAtPath:@"/path/to/some/file.xml"];
    if( self.fileHandle == nil )
    {
        [self.taskLabel setStringValue:@"Error:"];
        [self.taskText setStringValue:@"Unable to connect to status file"];
        return;
    }

    // register for notifications
    [self.fileHandle waitForDataInBackgroundAndNotify];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(readData:) name:NSFileHandleDataAvailableNotification object:nil];
}

读取回调

- (void)readData:(NSNotification*)note
{
    NSData* msg = [self.fileHandle availableData];
    if( [msg length] )
    {
        NSError* error = nil;
        NSDictionary* statusDictionary = [NSPropertyListSerialization propertyListWithData:msg options:NSPropertyListImmutable format:nil error:&error];
        [self displayStatus:statusDictionary];
    }    
    [self.fileHandle waitForDataInBackgroundAndNotify];
}

0 个答案:

没有答案