2013-07-01 1 views
0

핵심 데이터 엔티티에 새 객체를 추가 할 때 내 객체에 애니메이션이 적용되지 않습니다. 많은 것을 시도하고 내 if 문의 정수가 추가되어 managedObject에 변경 사항이 있는지 확인한 다음 if 문으로 이동합니다. 다소 나중에 reloadData를 호출 할 수 있으며 누락 된 셀을 tableview에 넣을 수 있지만 물론 애니메이션으로 처리하려고합니다.managedObject에 새 관계 객체가 저장되지 않음 UITableView에 애니메이션이 적용되지 않습니다.

정확히 insertRow 메서드를 넣어야합니까? 많은 점을 시도했지만 아직 업데이트가 끝나고 나중에 5 번째 행을 추가하려고하는 중 오류가 발생합니다.

- (void)insertNewObject 
{ 
    int count = [self.detailItem.catRelations count]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) 
        { 
         NSManagedObjectContext *context = self.managedObjectContext; 

         NSEntityDescription *entity = [NSEntityDescription entityForName:@"Image" inManagedObjectContext:self.managedObjectContext]; 
         newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context]; 


         [newManagedObject setImageMetaData:localImageMetaData]; 
         [newManagedObject setImageItself:localImageItself]; 
         [newManagedObject setImageCreationDate:[NSDate date]]; 
         [newManagedObject setImageName:localImageTitle]; 
         newManagedObject.imageRelations = self.detailItem; 
         // Save the context. 
         NSError *error = nil; 
         if (![context save:&error]) { 
          NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
          abort(); 
         } 


         dispatch_sync(dispatch_get_main_queue(), ^(void) 
            { 
             if (count != self.detailItem.catRelations.count) 
             { 

              NSIndexPath *path = [NSIndexPath indexPathForRow:count+1 inSection:0]; 
              [imagesTV insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft]; 
             } 

            }); 
        }); 

답변

1

저는 여기서도 담당자를 얻고 있으므로 질문 할 수는 없습니다. 그러나 나는 몇 가지 지시 사항을 제시하고 가능한 한 명확하게 정리할 수 있습니다.

먼저

당신은 NSFetchedResultsController을 조사 할 수 있습니다. 그것은 당신이 테이블 뷰에서 데이터를 삽입/업데이트/삭제하기 위해 술어와 델리게이트를 사용하여 데이터를 관리하는 데 도움을 줄 것입니다. 수동으로하는 동안 FRC를 고려해 볼 수있는 유효한 솔루션입니다. FRC 사용 방법은 link입니다.

둘째

그것 당신이 백그라운드에서 핵심 데이터 작업을 수행하고 좋아요. 반대로, 상대적으로 작은 데이터베이스의 핵심 데이터에 1 개체 만 추가하는 경우 생각만큼 많은 것을 구입하지 않을 수 있습니다. 나에게 걱정스러운 것은 self.managedObjectContext으로 전화하는 것입니다. 백그라운드 스레드를 사용하고 있으므로 백그라운드에서 사용하기에 문맥이 안전한지 확인해야합니다. 또한, 저장 한 후에 (배경 컨텍스트로 적절하게 설정되었다고 가정하면) 전경 컨텍스트로 병합하는 위치를 볼 수 없습니다. 결국 배경 컨텍스트가 필요하다고 생각되면 concurrency and core data을 읽어보십시오.

+0

두 점 모두 +1! –

관련 문제