【发布时间】:2011-09-21 10:02:51
【问题描述】:
我有一个类似这样的类别方法:
@implementation NSData (additions)
- (id)someFunc {
char *buffer = malloc(255);
NSUInteger length = 0;
while (true) {
// . . . fill buffer[length++];
}
realloc(buffer, length);
return [NSData dataWithBytesNoCopy:buffer length:length freeWhenDone:NO];
}
然后我正在尝试写入返回的数据(称之为 NSData *fileData):
NSError *error;
NSData fileData = [NSData someFunc];
[fileData writeToFile:somePath options:NSDataWritingAtomic error:&error];
我收到一个错误:
错误域=NSCocoaErrorDomain Code=512 "无法操作 完全的。 (可可错误 512。)” 用户信息=0x20deffd0 {NSFilePath=/用户/用户/库/应用程序 支持/iPhone 模拟器/4.3/Applications/4C315580-153D-4FA7-9474-E17B58832515/Library/Caches/file.pdf, NSUnderlyingError=0x20de1fe0 "的 操作无法完成。坏的 地址"}
路径存在且有效。我认为问题在于返回的 NSData 只是一个围绕分配有 malloc 的数组的轻包装,而 writeToFile 不知道如何处理这个问题。有人看到我做错了吗?
【问题讨论】:
-
需要保存realloc返回的地址:
buffer = realloc(buffer, length); -
@DarkDust 这就是问题所在,请给出答案,我会接受。
标签: iphone ios memory file-io nsdata