为什么要创建一个临时文件(保存资产)抛出EXC_BAD_ACCESS?

时间:2014-05-13 09:40:21

标签: ios iphone objective-c xcode ipad

问题:

我想创建一个临时文件,用于保存我通过ALAssetLibrary读取的资产中的RAW数据。但是,当我尝试通过NSFileManager的{​​{1}}创建文件时,应用程序会停止并抛出[createFileAtPath:contents:attributes:]。好吧,这个错误通常意味着我有一个破坏或错误的指针,但除了EXC_BAD_ACCESS

之外,我的代码中没有任何内容设置为nil

我设法成功运行了几次代码,但之后在iOS7 +下创建文件时每次崩溃都会崩溃。下面的iOS版本似乎能够创建和写入文件,但是一旦我尝试以任何方式访问它,就会出现同样的错误。

  • 只是为了澄清:“tmp”目录中没有文件。
  • 下面,临时文件的完整路径是: fileHandle IVAR.

容易出错的代码

/private/var/mobile/Applications/83BFD709-3587-404D-97E7-BEAAA2860283/tmp/temp.tmp

下面是导致崩溃的部分。

 - (NSString *)applicationTempDirectory
{

   // NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    //NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

    NSString* basePath = NSTemporaryDirectory();
    return basePath;
}

问题:

有没有人知道为什么这个看似简单的任务没有按预期工作?除了将任何属性设置为.... <NEW METHOD> NSUInteger chunkSize = 1000 * 1024; //1MB chunks ALAssetRepresentation* rep = [asset_ defaultRepresentation]; uint8_t chunkbuffer[chunkSize]; long long length = [rep size]; // Copy file NSString* tempFile = [NSString stringWithFormat:@"%@/temp.tmp", [self applicationTempDirectory]]; NSFileManager *fileMgr = [NSFileManager defaultManager]; NSFileHandle* fileHandle = [NSFileHandle fileHandleForWritingAtPath: tempFile]; if(!fileHandle) { NSLog(@"File path_: %@", tempFile); [fileMgr createFileAtPath:tempFile contents:nil attributes:nil]; //<--- Here it throws the exception fileHandle = [NSFileHandle fileHandleForWritingAtPath:tempFile]; } NSUInteger offset = 0; do { NSUInteger bytesCopied = [rep getBytes:chunkbuffer fromOffset:offset length:sizeof(chunkbuffer) error:nil]; offset += bytesCopied; NSData *data = [[NSData alloc] initWithBytes:chunkbuffer length:bytesCopied]; [fileHandle writeData:data]; data=nil; } while (offset < length); [fileHandle closeFile]; fileHandle = nil; .... <CONTINUES ON> 之外,我已尝试过几乎所有内容。我在网上搜索了所有内容,但似乎没有人像我一样遇到同样的问题。这里的一些SO很接近,但在尝试提供的解决方案后,它没有用......

1 个答案:

答案 0 :(得分:0)

[fileMgr createFileAtPath:tempFile contents:nil attributes:nil];

您正在创建一个没有任何数据的文件。根据{{​​3}},虽然attributes参数可以是nil,但没有指定contents。这可能是导致问题的原因。