Altere um URL relativo para URL absoluto no objetivo C
-
22-09-2019 - |
Pergunta
Como eu pegaria um arquivo no diretório do aplicativo (a mesma pasta em que está .App está dentro) e obtém seu caminho absoluto. Digamos que o caminho relativo seja "dados/file.txt", como eu usaria o objetivo C para conseguir isso como um caminho absoluto? Eu tenho o usuário inserir o nome da pasta doméstico, se isso for alguma ajuda.
Por favor ajude,
Oi Cara
Solução
Encontre a localização do aplicativo em execução fazendo:
NSString * applicationPath = [[NSBundle mainBundle] bundlePath];
Que retornará algo como:
/Users/myUser/Library/Application Support/iPhone Simulator/User/Applications/317CF5C7-57B3-42CE-8DF4-4DD10B070D95/Assignment1a.app
Em seguida, use - (NSString *)stringByDeletingLastPathComponent
Para cortar o último bit.
Outras dicas
Eu usaria o NSURL
Métodos que resolvem URLs para mim, assim:
NSURL * bundle = [[NSBundle mainBundle] bundleURL];
NSURL * file = [NSURL URLWithString:@"../Data/file.txt" relativeToURL:bundle];
NSURL * absoluteFile = [file absoluteURL];
O ".. ../" é necessário, porque, caso contrário, tentaria localizar o arquivo lado de dentro seu pacote de aplicativos. Colocar o "../" de antemão dirá para olhar na pasta contendo do pacote, e não no próprio pacote. Também, -[NSBundle bundleURL]
é uma API de 10,6+, mas é trivial replicar a funcionalidade usando um NSURL
método de conveniência e -[NSBundle bundlePath]
.
Você deve ser capaz de concatenar a pasta raiz do aplicativo, com o caminho relativo. Você pode chegar ao diretório inicial do aplicativo com o NSHOMEDIRECTORY (), para obter o caminho absoluto, você pode fazer algo como o seguinte:
NSString *path = [NSHomeDirectory() stringByAppendingString: @"/Data/file.txt"];