Каков наилучший способ найти каталог документов пользователя на iPhone?


Я читаю Эрику Садун Поваренная книга разработчика iPhone, и столкнулся с вопросом.

Она говорит в книге, что для того, чтобы найти каталог документов пользователя с кодом:

[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

но это кажется немного хрупким и непохожим на обычный способ Mac сделать это, который был бы:

NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);

есть ли какие-то особые причины использовать один над другим?

5 58

5 ответов:

Objc:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)

Swift:

var paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)

вам понадобится первый элемент возвращаемого массива.

вот код, который я использую в моих рамках.

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

вы должны рассмотреть возможность использования методов NSFileManager, которые возвращают URL-адреса, которые являются предпочтительным форматом.

let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL

этот метод предназначен для поиска известных и общих каталогов в системе.

массив объектов NSURL, идентифицирующих запрошенные каталоги. Каталоги упорядочены в соответствии с порядком констант маски домена, с элементами в домене пользователя первым и элементами в системном домене последним.

Я использую этот

NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *zipLocalPath = [documentPath stringByAppendingString:fileName];

в swift v3 я использовал следующий фрагмент

var paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)