Search code examples
iosobjective-cfilepathnsdocumentdirectory

Data not being written to file?


I'm using FastttCamera as a wrapper on AVFoundation in order to implement a camera in my app. Things appear to work fine until I try to save a captured image with the following code:

- (void)cameraController:(FastttCamera *)cameraController didFinishScalingCapturedImage:(FastttCapturedImage *)capturedImage
{
    //Use the image's data that is received
    pngData = UIImagePNGRepresentation(capturedImage.scaledImage);

    NSLog(@"1 The size of pngData should be %lu",(unsigned long)pngData.length);

    //Save the image someplace, and add the path to this transaction's picPath attribute
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory

    int timestamp = [[NSDate date] timeIntervalSince1970];

    NSString *timeTag = [NSString stringWithFormat:@"%d",timestamp];

    filePath = [documentsPath stringByAppendingString:timeTag]; //Add the file name


    NSLog(@"The picture was saved at %@",filePath);


    [self.imageWell setImage:capturedImage.scaledImage];
}

and

...
    [pngData writeToFile:filePath atomically:YES]; //Write the file

    NSLog(@"The pngData is written to file at %@",filePath);

    NSLog(@"2 The size of this file should be %lu",(unsigned long)pngData.length);

    self.thisTransaction.picPath = filePath;
...

I try to retrieve the picture later for use in a tableview cell, but nothing shows up. So I started trying to track where things go wrong, and apparently the data is not actually being written to the file specified by the file path. I'm getting the following console readouts from strategically placed NSLogs:

The pngData is written to file at /var/mobile/Containers/Data/Application/114FC402-83E0-4D15-B1E0-68E09DAB34DC/Documents1431292149
The size of this file should be 213633

and this return from the file at the file path:

The size of fileSizeFromFilePath is 0

I've looked at quite a few SO questions, but haven't been able to figure it out. Can someone please show me where I'm going wrong?


Solution

  • The pngData is written to a incorrect path /path/to/sandbox/Documents1431292149 which is not exist.

    You should replace

    filePath = [documentsPath stringByAppendingString:timeTag];
    

    with

    filePath = [documentsPath stringByAppendingPathComponent:timeTag];