Короче говоря: вы просто не можете сделать это, используя приложение в песочнице. Выключите Песочницу, и вы увидите, что она работает. Зачем? Ну, это из-за контейнеров. Песочница живет в своем собственном контейнере, поэтому при вызове [NSUserDefaults standardUserDefaults] Какао использует путь вашего контейнера, а не путь POSIX ~ / Library / Preferences, где находится com.apple.iApps.plist. Это подводит итог, почему вы получаете ноль. Кроме того, здесь в NSUserDefaults есть реклама: ссылка
Как это исправить?
Это действительно неплохо. Сначала вам нужно немного поработать, чтобы получить путь POSIX вашего домашнего каталога. Я настроил кучу методов категории NSURL. Однако корневой путь основан на POSIX. Вот фрагмент кода, с которого можно начать.
1
+ (NSURL *) homePOSIXURL {
struct passwd *pwUser = getpwuid(getuid());
const char *homeDir = pwUser->pw_dir;
return [NSURL fileURLWithPath:[NSString stringWithUTF8String:homeDir] isDirectory:YES]; }
Когда все сказано и сделано, проложите полный путь к списку. Он не менялся годами, поэтому вы можете считать его липким.
Так что теперь вы можете получить что-то похожее на это:
2
NSURL * prefURL = [[NSURL libraryPOSIXURL] URLByAppendingPathComponent:@"Preferences" isDirectory:YES];
prefURL = [prefURL URLByAppendingPathComponent:@"com.apple.iApps.plist"];
Теперь давайте превратим этот список, который довольно мал, в то, что мы можем играть. Возможно NSData? Звучит хорошо, правда?
3.
NSData * prefData = [NSData dataWithContentsOfURL:prefURL];
Хорошо, наконец, мы можем использовать это сейчас, чтобы получить NSDictionary. Вот как я это делаю.
4
NSDictionary * prefDict = [NSDictionary collectionFromPropertyList:prefData];
Да, да, еще одна категория по NSDictionary. У меня должно быть миллион из них.
Потому что я в настроении для обмена, вот и ты:
+ (id) collectionFromPropertyList:(NSData *)pList {
if ( [pList length] > 0 )
return [NSPropertyListSerialization propertyListWithData:pList
options:NSPropertyListImmutable
format:nil error:nil];
return nil;
}
Итак, вы думаете, что мы закончили? Ну, почти. Если вы зайдете так далеко, вы получите отрицание, например:
запретить чтение-файл-данные
/Users/UserName/Library/Preferences/com.apple.iApps.plist
Нам нравится наше приложение с песочницей ?! В основном добавьте ваше временное право, и вы должны снова участвовать в гонках. Удачи тебе!