MotionInMotion Episode 17 - RestKit
RestKitを使ってTaskアプリのCRUD
- RestKit
- little code
- continue task app
- サーバーサイドrails app
rake pod:install
- pod 'RestKit'
- pod 'SVProgressHUD'
- AFNetworking (1.3.3)
- RestKit (0.22.0)
- RemoteManager
- class << self
- include CDQ
- setup
- RKObjectManager.sharedManager = manager
- class << self
- manager (singleton)
- Dispatch.once do
- @manager = RKObjectManager.managerWithBaseURL(NSURL.URLWithString('http://cryptic-everglades-8921.herokuapp.com/'))
- @manager.managedObjectStore = store (singleton)
- @store = RKManagedObjectStore.alloc.initWithPersistentStoreCoordinator(cdq.stores.current)
- cdq.contexts.push(@store.persistentStoreManagedObjectContext)
- cdq.contexts.push(@store.mainQueueManagedObjectContext)
- @manager.addRequestDescriptor(task_request_descriptor)
- @task_request_descriptor = RKRequestDescriptor.requestDescriptorWithMapping
- task_request_mapping
- @task_request_descriptor = RKRequestDescriptor.requestDescriptorWithMapping
- @manager.addResponseDescriptor(task_response_descriptor)
- @task_response_descriptor = RKResponseDescriptor.responseDescriptorWithMapping
- statusCodes: RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)
- task_request_mapping
- @task_request_mapping = RKObjectMapping.requestMapping
- @task_request_mapping.addAttributeMappingsFromArray(['name', 'note', 'due_at'])
- @task_request_mapping.addAttributeMappingsFromDictionary({'task_id' => 'id'})
- @task_mapping = RKEntityMapping.mappingForEntityForName('Task', inManagedObjectStore: store)
- Command Design Pattern
- LoadTasksCommand
- SVProgressHUD.showWithStatus('Loading Tasks')
- Dispatch::Queue.concurrent(:default).async do
- RemoteManager.object_manager.getObjectsAtPath
- unless mapping_result.array.include? task
- task.destroy
- AddTaskCommand
- RemoteManager.object_manager.postObject
- UpdateTaskCommand
- RemoteManager.object_manager.patchObject(@task,
- DeleteTaskCommand
- RemoteManager.object_manager.deleteObject
- LoadTasksCommand
- TaskListController refresh
- LoadTasksCommand.run