首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是文档目录(NSDocumentDirectory)?

什么是文档目录(NSDocumentDirectory)?
EN

Stack Overflow用户
提问于 2011-08-02 12:49:27
回答 9查看 143.4K关注 0票数 131

有人能给我解释一下iOS应用上的文档目录是什么吗?什么时候使用它?

以下是我目前所相信的:

对我来说,它似乎是一个中央文件夹,用户可以在其中存储应用程序所需的任何文件。

这是否与Core data存储数据的位置不同?

似乎每个应用程序都有自己的文档目录。

我可以自由地创建文档目录的子目录,如文档目录/image或文档目录/videos?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-08-02 12:56:50

您的应用程序只能(在未越狱的设备上)在“沙箱”环境中运行。这意味着它只能访问自己内容中的文件和目录。例如,文档

请参阅。

要访问应用程序沙箱的Documents目录,可以使用以下命令:

iOS 8和更高版本,这是推荐的方法

代码语言:javascript
复制
+ (NSURL *)applicationDocumentsDirectory
{
     return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

如果您需要支持iOS 7或更早版本

代码语言:javascript
复制
+ (NSString *) applicationDocumentsDirectory 
{    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = paths.firstObject;
    return basePath;
}

Documents目录允许您存储应用程序创建或可能需要的文件和子目录。

要访问应用程序沙箱的目录中的文件,请使用(代替上面的paths ):

代码语言:javascript
复制
[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0]
票数 200
EN

Stack Overflow用户

发布于 2015-05-13 04:43:37

这在iOS 8中发生了变化。请参阅以下技术说明:https://developer.apple.com/library/ios/technotes/tn2406/_index.html

Apple认可的方式(来自上面的链接)如下所示:

代码语言:javascript
复制
// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
票数 43
EN

Stack Overflow用户

发布于 2012-10-25 18:10:07

我在文档中找不到被接受的答案建议的代码,但我在这里找到了更新后的等价物:

代码语言:javascript
复制
- (NSURL*)applicationDataDirectory {
    NSFileManager* sharedFM = [NSFileManager defaultManager];
    NSArray* possibleURLs = [sharedFM URLsForDirectory:NSApplicationSupportDirectory
                                 inDomains:NSUserDomainMask];
    NSURL* appSupportDir = nil;
    NSURL* appDirectory = nil;

    if ([possibleURLs count] >= 1) {
        // Use the first directory (if multiple are returned)
        appSupportDir = [possibleURLs objectAtIndex:0];
    }

    // If a valid app support directory exists, add the
    // app's bundle ID to it to specify the final directory.
    if (appSupportDir) {
        NSString* appBundleID = [[NSBundle mainBundle] bundleIdentifier];
        appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID];
    }

    return appDirectory;
}

它不鼓励使用NSSearchPathForDirectoriesInDomain:

NSSearchPathForDirectoriesInDomains函数的行为类似于URLsForDirectory,但它将目录的位置作为基于字符串的路径返回。您应该改用URLsForDirectory:inDomains:方法。

下面是其他一些有用的目录常量。毫无疑问,并不是所有这些都在iOS中得到支持。您还可以使用NSHomeDirectory()函数,该函数:

在iOS中,主目录是应用程序的沙箱目录。在OS X中,它是应用程序的沙箱目录或当前用户的主目录(如果应用程序不在沙箱中)

来自NSPathUtities.h的

代码语言:javascript
复制
NSApplicationDirectory = 1,             // supported applications (Applications)
    NSDemoApplicationDirectory,             // unsupported applications, demonstration versions (Demos)
    NSDeveloperApplicationDirectory,        // developer applications (Developer/Applications). DEPRECATED - there is no one single Developer directory.
    NSAdminApplicationDirectory,            // system and network administration applications (Administration)
    NSLibraryDirectory,                     // various documentation, support, and configuration files, resources (Library)
    NSDeveloperDirectory,                   // developer resources (Developer) DEPRECATED - there is no one single Developer directory.
    NSUserDirectory,                        // user home directories (Users)
    NSDocumentationDirectory,               // documentation (Documentation)
    NSDocumentDirectory,                    // documents (Documents)
    NSCoreServiceDirectory,                 // location of CoreServices directory (System/Library/CoreServices)
    NSAutosavedInformationDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 11,   // location of autosaved documents (Documents/Autosaved)
    NSDesktopDirectory = 12,                // location of user's desktop
    NSCachesDirectory = 13,                 // location of discardable cache files (Library/Caches)
    NSApplicationSupportDirectory = 14,     // location of application support files (plug-ins, etc) (Library/Application Support)
    NSDownloadsDirectory NS_ENUM_AVAILABLE(10_5, 2_0) = 15,              // location of the user's "Downloads" directory
    NSInputMethodsDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 16,           // input methods (Library/Input Methods)
    NSMoviesDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 17,                 // location of user's Movies directory (~/Movies)
    NSMusicDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 18,                  // location of user's Music directory (~/Music)
    NSPicturesDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 19,               // location of user's Pictures directory (~/Pictures)
    NSPrinterDescriptionDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 20,     // location of system's PPDs directory (Library/Printers/PPDs)
    NSSharedPublicDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 21,           // location of user's Public sharing directory (~/Public)
    NSPreferencePanesDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 22,        // location of the PreferencePanes directory for use with System Preferences (Library/PreferencePanes)
    NSApplicationScriptsDirectory NS_ENUM_AVAILABLE(10_8, NA) = 23,      // location of the user scripts folder for the calling application (~/Library/Application Scripts/code-signing-id)
    NSItemReplacementDirectory NS_ENUM_AVAILABLE(10_6, 4_0) = 99,       // For use with NSFileManager's URLForDirectory:inDomain:appropriateForURL:create:error:
    NSAllApplicationsDirectory = 100,       // all directories where applications can occur
    NSAllLibrariesDirectory = 101,          // all directories where resources can occur
    NSTrashDirectory NS_ENUM_AVAILABLE(10_8, NA) = 102                   // location of Trash directory

最后,介绍了NSURL类别http://club15cc.com/code/ios/easy-ios-file-directory-paths-with-this-handy-nsurl-category中的一些方便方法

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6907381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档