Adicionando dias ao NSDate

Um simples exemplo de como adicionar dias a um NSDate:

“_OBJC_CLASS_$_XXX”, referenced from:

Este erro ocorre pois a classe copiada para o projeto não foi adicionada ao Target. Para corrigir, basta selecionar a implementação (.m) e no painel direito (Utilities)
marcar a opção Target Membership

Target Membership

ld: duplicate symbol

Este erro normalmente ocorre quando a mesma classe existe no projeto em grupos diferentes, bastando remover uma das cópias para resolver.

Rollback no Core Data

Em alguns casos, precisamos cancelar o processamento devido a problemas nos dados. Normalmente o Core Data já cuida do rollback em caso de erro, porém em certos casos precisamos fazer este controle manualmente.

Abaixo os passos para a execução de um rollback manual:

Declare em sua interface uma propriedade do tipo NSUndoManager e um NSManagedObjectContext:

Método exemplificando o rollback:

O que acontece no método acima é que agrupamos a execução de nossos métodos com o undoManager e caso um deles falhe, forçamos o rollback com o comando undo.

Core Data e Multithreading

Core data é uma das poucas tecnologias que realmente facilitam a vida do desenvolvedor, inclusive sinto falta quando estou desenvolvendo para Android ou Windows Phone.

Porém, nem tudo são flores, quando precisamos realizar operações pesadas que incluem o banco de dados, precisamos utilizar Multithreading e tomar certas precauções para que a interface do usuário não congele e os dados sejam atualizados de maneira correta.

Não vou entrar a fundo no processo de multithreading com Core Data, porém, deixo aqui a documentação de referência.

De acordo com a documentaçõa existem 2 maneiras para que nossa aplicação se comporte de maneira correta em um ambiente multithreading:

  1. Create a separate managed object context for each thread and share a single persistent store coordinator.This is the typically-recommended approach.
  2. Create a separate managed object context and persistent store coordinator for each thread.This approach provides for greater concurrency at the expense of greater complexity (particularly if you need to communicate changes between different contexts) and increased memory usage.

Aqui vou falar como implementar o primeiro caso, por ser o mais utilizado devido a baixa complexidade.

Dentro de sua interface, crie um novo NSManagedObjectContext:

Abaixo 2 métodos que serão utilizados no tratamento do novo NSManagedObjectContext:

Antes de iniciar o processamento pesado, inicialize o novo NSManagedObjectContext:

Para fazer a execução em pararelo utilizaremos um NSOperationQueue. Declare-o em sua interface:

Abaixo os método que inicializa a fila de processamento pararelo:

Para finalizar, o método que verifica o término do processamento pararelo:

Removendo a sombra do UIWebView

Pequeno trecho de código para quem precisa remover a sombra em volta do UIWebView

« Anteriores