Search code examples
iosobjective-casynchronousfile-read

How to read a file from the Documents directory asynchronously in ios


I want to read a local file stored in the Documents directory asynchronously. My code is given below:

-(NSString *)getLogFilePath
{
    NSString *logFileNameString = logFile;
    return  [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:logFileNameString];
}


 -(NSString *)readStringFromFile
  {
  NSString *fileAtPath =  [self getLogFilePath];
  return [[NSString alloc] initWithData:[NSDataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding];
  }

Someone please help me in this regard. Thanks in advance.


Solution

  • Use Grand Central Dispatch and Block syntax to do this,

    +(void) readStringFromFileWithCompletion:(void (^)(BOOL success,NSString *output))completionBlock{
    
    
    dispatch_queue_t myQueue = dispatch_queue_create("FileReadingQueue",NULL);
    dispatch_async(myQueue, ^{
        // Perform long running process
        NSString *fileAtPath =  [self getLogFilePath];
        NSString *output = [[NSString alloc] initWithData:[NSData dataWithContentsOfFile:fileAtPath] encoding:NSUTF8StringEncoding];
    
        completionBlock(true,output);
    
    });
    

    }

    Use your method,

    [self readStringFromFileWithCompletion:^(BOOL success, NSString *output) {
        // use 'output' here, to get the string read from file
    }];