保存到 iOS 中的文档目录

saving to documents directory in iOS

我正在尝试保存到 iOS 中的文档目录,主要是从这些问题中获取的: Save An Image To Application Documents Folder From UIView On IOS and how to save video in documents folder then upload to server

这是我的问题。以下代码无法保存:

NSString *mov = @".mov";
NSString *finalPath = [NSString stringWithFormat: @"/%@%@", self.videoChallengeID, mov];
NSString *videoPath= [[NSString alloc] initWithString:[NSString stringWithFormat:finalPath,documentsDirectory]];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:videoPath forKey:self.videoChallengeID];
BOOL success = [self.videoData writeToFile:videoPath atomically:NO];

但以下代码确实可以保存:

NSString *videoPath= [[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/thisWorks.mov",documentsDirectory]];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:videoPath forKey:self.videoChallengeID];
BOOL success = [self.videoData writeToFile:videoPath atomically:NO];

唯一的区别是我在保存的示例中写入的路径被硬编码为 %@/thisWorks.mov 而在另一个示例中,路径是2 个连接的字符串。

但我需要保存的路径是可变的,而不是硬编码的。我该如何解决这个问题?

您是否调试了第一个示例中的 videoPath?从代码来看,您似乎是通过添加 finalPath 向后构建路径,然后文档目录尝试这样做:

NSString *videoPath = [documentsDirectory stringByAppendingString:finalPath];

你看到的是这样的:

NSString *documentsDirectory = @"A_Directory/Documents";
NSString *fileName           = @"SomeVideoName";
NSString *fileType           = @".mov";

您需要将所有这些结合起来才能制作:

@"A_Directory/Documents/SomeVideoName.mov"

您可以使用:

NSString *fullPath = [NSString StringWithFormat:@"%@/%@%@", documentsDirectory, fileName fileType];

或者你可以利用 NSStrings 路径方法

stringByAppendingPathComponent
stringByAppendingPathExtension

如果你改变

NSString *fileType = @".mov";

NSString *fileType = @"mov";

你这样做:

NSString *pathWithOutExtension = [documentsDirectory stringByAppendingPathComponent:fileName];
NSString *fullPath = [pathWithOutExtension stringByAppendingPathExtension:fileType];