我希望我的应用程序将您用它拍摄的视频复制到App Sandbox内的目录。
这是我到目前为止所写的内容。
- (void) imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
int r = arc4random() % 100;
int s = arc4random() % 100;
int e = arc4random() % 100;
NSLog(@"%i%i%i.MOV", r, s, e);
NSString *tempFileName = (@"%i%i%i.MOV", r, s, e);
NSString *tempFilePath = [[info objectForKey:UIImagePickerControllerMediaURL] path];
NSString *documentsDirectory
= [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)
objectAtIndex:0];
NSString *storePath = [documentsDirectory stringByAppendingPathComponent:tempFileName];
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtURL:tempFilePath
toURL:[NSURL fileURLWithPath:storePath]
error:&error];
但是在我的iPhone上测试我的应用程序后,程序在拍摄视频后按下使用后卡住了。 xCode告诉
上的EXC_BAD_ACCESSNSString * storePath = [documentsDirectory stringByAppendingPathComponent:tempFileName];
这里有什么不妥?
呃,我实际上想要在应用程序沙箱中“创建”一个名为视频的新目录并保存在其中。 我不能这样做,所以我使用的是文件目录。
谢谢!
答案 0 :(得分:1)
异常跟踪显示您尝试将isFileURL:方法发送到NSString,而NSString不是NSString上的有效方法。我没有看到任何isFileURL:在你发布的代码中,检查你的代码,看看你可能在做什么。
答案 1 :(得分:1)
您正在发送消息
isFileURL
以某种方式在调试器中启用malloc堆栈日志记录,保护malloc和zombie,然后运行:
(gdb) info malloc-history 0x1b18b0
其中0x1b18b0是发送无法识别的选择器的东西的地址。它应该为您提供有关代码中问题所在位置的更多信息。
答案 2 :(得分:1)
问题在于这一行
NSString * tempFileName = (@"%i%i%i.MOV", r, s, e);
您使用comma operator而不是实际格式化字符串,而{{3}}最终将tempFileName
设置为e
中存储的随机数,这将是无效地址。该行等同于以下内容。
@"%i%i%i.MOV";
r;
s;
//Now here is where the pointer is set to an invalid address
//resulting in EXC_BAD_ACCESS
NSString * tempFileName = e;
要解决这个问题,您只需格式化字符串即可。要解决另一个问题,您需要像tempFilePath
那样为storePath
实际制作网址。
NSString * tempFileName = [NSString stringWithFormat:@"%i%i%i.MOV", r, s, e];
...
NSError *error = nil;
[[NSFileManager defaultManager] copyItemAtURL:[NSURL fileURLWithPath:tempFilePath]
toURL:[NSURL fileURLWithPath:storePath]
error:&error];