从FileManager获取app Group的路径

Obtain the path of app Group from FileManager

我正在尝试为 WatchKit 更新我的应用程序,并且我通常将 NSKeyedArchiver 文件保存到 NSDocumentsDirectory。 更新到应用程序组后,我需要将其存储在应用程序组文件夹中。我遇到的问题是我无法弄清楚如何获取路径,而不是将其作为我正在寻找的文件进行引用。

现在设置的方式是找到它给出路径的文件作为 NSString

/Users/ME/Library/Developer/CoreSimulator/Devices/43F/data/Containers/Data/Application/5E/Documents/fav

但是当我存储到应用程序组时,无论我以何种方式访问​​该文件夹,它都会返回

file:///Users/ME/Library/Developer/CoreSimulator/Devices/43F/data/Containers/Data/Application/5E/Documents/fav

仅获取共享组路径而不是让应用程序查找直接文件的最佳方法是什么?

所以喝咖啡的我忘记了文件管理器的 .path。

NSURL *fileManagerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com"];
NSString *tmpPath = [NSString stringWithFormat:@"%@", fileManagerURL.path];
NSString *finalPath = [NSString stringWithFormat:@"%@",[string stringByAppendingString:@"/Favourites2"]];

我 运行 遇到了同样的问题。我正在经历为我的保存位置构建字符串的整个过程,现在我正在切换到应用程序组并使用

NSURL *fileManagerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:groupID];

好吧,问题是,现在您得到的不是指向以“/Users/yourname/Library...”开头的位置的字符串,而是 "file:///Users/yourname/Library..."

这是我所做的。我创建了 NSURL。然后我在上面调用了absoluteString

NSURL groupPath = [[fileManager containerURLForSecurityApplicationGroupIdentifier:groupID] absoluteString];

我现在有一个字符串,我需要去掉它的前 7 个字符,然后我的旧代码就可以正常工作,除了现在它不在文档目录中,而是在可以访问的共享应用程序组中通过我的旧代码和我的新 watchkit 扩展。

这是去除前 7 个字符的代码(索引 6,因为你从 0 开始),你应该可以使用任何一种方法...

NSString *newGroupPath = [groupPath substringFromIndex:6];

NSString *newGroupPath = [groupPath substringWithRange:NSMakeRange(6, [str length]-6)];

这只是从由 NSURL 生成的 absoluteString 中删除了 "file://",并返回以“/Users/YourName/Library/Developer/yada yada yada”开头的旧字符串路径

希望对你有帮助,我花了 4 个小时弄明白了。

它似乎在模拟器上对我有用,我还没有在 Watch 上尝试过。但至少我的应用程序现在可以像以前一样工作,只是将数据保存在共享应用程序组中。 (我有一个单例管理我整个应用程序中的所有数据,我希望同一个单例向我的手表应用程序提供数据)。