Pergunta

Em um aplicativo não baseado em documento do Mac OS X (10.7 Lion), desejo incluir o suporte iCloud para que eu possa compartilhar dados entre outras instâncias do mesmo aplicativo em outros macs (não para iOS dispositivos). Depois de navegar um pouco pela documentação da Apple, descobri que deveria usar um armazenamento de lista de valores-chave no iCloud, pois o documento que desejo enviar contém apenas uma matriz de objetos personalizados (que têm propriedades simples, como um nome (string) , data (objeto de data), ...). Este arquivo é a única coisa que desejo carregar no iCloud. Dentro do aplicativo, eu já implementei salvar o arquivo no disco usando NSFileManager - (void)writeData:(NSData*)data toPath:(NSString *)path (ou seja lá o que for, esqueci). Ele é carregado do arquivo usando NSFileManager novamente (usando - (NSData *)dataInFileAtPath:(NSString*)path, ou o que quer que seja). O arquivo é armazenado em um subdiretório, no diretório de Suporte de Aplicativo do usuário. Ele é salvo sempre que um novo item é adicionado à matriz ou um item na matriz é modificado.

Eu queria saber se alguém poderia fornecer um link para um tutorial ou me apontar na direção certa, para escrever esse arquivo no iCloud e, em seguida, baixá-lo novamente em outras instâncias do mesmo aplicativo? Todos os tutoriais e documentação que encontrei são apenas para iOS. Qualquer ajuda será muito apreciada!

Desde já, obrigado!

Ben

Foi útil?

Solução

Basta usar NSUbiquitousKeyValueStore , que é muito parecido com NSUserDefaults, exceto que é gravado no iCloud. Você deve ler o Armazenamento iCloud seção do guia de programação de aplicativos Mac, mas o que você precisa fazer pode ser tão simples quanto habilitar direitos na guia Resumo de seu destino de aplicativo no Xcode e, em seguida, fazer algo como:

NSData *dataToStore = [NSKeyedArchiver dataWithRootObject:yourArray];
[[NSUbiquitousKeyValueStore defaultStore] setData:dataToStore forKey:@"yourKey"]; 

Então, para recuperar seus dados, basta fazer

NSData *retrievedData = [[NSUbiquitousKeyValueStore defaultStore] dataForKey:@"yourKey"];
NSArray *retrievedArray = [NSKeyedUnarchiver unarchiveObjectWithData:retrievedData];

A única ressalva aqui é que para que isso funcione com uma matriz de objetos personalizados, todos esses objetos devem implementar o Protocolo NSCoding . É apenas uma questão de implementar dois métodos; aqui está um bom tutorial .

P.S. Você usa as mesmas APIs se estiver desenvolvendo para OS X ou iOS, então não há motivo para não seguir um tutorial do iOS para armazenamento no iCloud.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top