J'essaie d'obtenir un NSString pour le dossier de support d'application de l'utilisateur.
Je sais que je peux faire NSString *path = @"~/Library/Application Support";
mais cela ne semble pas très élégant. J'ai joué avec l'utilisation de NSSearchPathForDirectoriesInDomains
, mais elle semble être assez longue et crée plusieurs objets inutiles (du moins, mon implémentation le fait).
Y a-t-il un moyen simple de faire cela?
Ceci est obsolète, utilisez FileManager.default.urls(for:in:)
pour les meilleures pratiques actuelles, comme dans le commentaire de @ andyvn22 ci-dessous.
la meilleure pratique consiste à utiliser NSSearchPathForDirectoriesInDomains
avec NSApplicationSupportDirectory
aussi long que possible.
Exemple:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths firstObject];
NSLog(@"applicationSupportDirectory: '%@'", applicationSupportDirectory);
Sortie NSLog:
applicationSupportDirectory: '/Volumes/User/me/Library/Application Support'
Swift 4:
print(NSHomeDirectory())
ou
print(FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)
et
let yourString = String(FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first)
Swift 3:
FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first
Cela fonctionne pour moi:
NSError *error;
NSURL* appSupportDir = [[NSFileManager defaultManager]
URLForDirectory:NSApplicationSupportDirectory
inDomain:NSUserDomainMask
appropriateForURL:nil
create:YES
error:&error];
Créez une classe Objective C séparée pour la lecture et l’écriture dans le répertoire de documents. Je vais éviter la réécriture du code. Ci-dessous est ma version de celui-ci.
//Directory.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#define PATH (NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES))
#define BASEPATH (([PATH count] > 0)? [PATH objectAtIndex:0] : nil)
@interface DocumentsDirectory : NSObject
//Here you can also use URL path as return type and file path.
+(void)removeFilesfromDocumentsDirectory:(NSString*)filename;
+(NSString*)writeFiletoDocumentsDirectory:(NSString*)filename;
@end
#import "Directory.h"
@implementation DocumentsDirectory
UIAlertView *updateAlert;
+(void)removeFilesfromDocumentsDirectory:(NSString*)filename
{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *filePath = [BASEPATH stringByAppendingPathComponent:filename];
NSError *error;
BOOL success = [fileManager removeItemAtPath:filePath error:&error]; //Remove or delete file from documents directory.
if (success)
{
updateAlert= [[UIAlertView alloc] initWithTitle:@"Congratulations:" message:@"File is updated successfully" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[updateAlert show];
}
else
{
NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);
updateAlert= [[UIAlertView alloc] initWithTitle:@"Try again:" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[updateAlert show];
}
}
+(NSString*)writeFiletoDocumentsDirectory:(NSString*)filename
{
NSString *foldDestination = BASEPATH;
NSString *filePath = [foldDestination stringByAppendingPathComponent:filename];
return filePath;
}
@end
C'est ce que j'utilise pour obtenir la base de données. Je l'ai eu de la classe de Stanford. Cela pourrait aider quelqu'un.
NSURL *url = [[[NSFileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"database_name"];
NSLog(@"Database URL: %@",url);