Question

I've got a method in my app that writes a string to the end of a file:

-(void)log:(NSString *)str
{
  if (![[NSFileManager defaultManager] fileExistsAtPath:self.logPath])
    [[NSFileManager defaultManager] createFileAtPath:self.logPath contents:nil attributes:nil];

  NSError *err = nil;
NSFileHandle *myHandle = [NSFileHandle fileHandleForWritingToURL:[NSURL fileURLWithPath:self.logPath] error:&err];
if (!myHandle)
    NSLog(@"Failed to write file - %@", err.localizedDescription);
  [myHandle seekToEndOfFile];
  [myHandle writeData:[str dataUsingEncoding:NSUTF8StringEncoding]];
  [myHandle closeFile];
}

It works for a while and then starts failing; fileHandleForWritingToURL returns nil. The error I get is NSCocoaErrorDomain error 24. But I can't find any reference to this error anywhere. Google is no help. Has anyone seen this before? Am I doing something wrong?

Was it helpful?

Solution

My sense is that NSCocoaErrorDomain is mapped to UNIX errno values, and errno 24 is "too many open files". Have a close look at the NSFileHandle class reference. Also,

[myHandle seekToEndOfFile]; [myHandle writeData:[str dataUsingEncoding:NSUTF8StringEncoding]]; [myHandle closeFile];

should be in the else case of your

if (!myHandle)

test.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top