2011-08-15 9 views
0

예를 들어 주식 정보가 담긴 앱을 CoreData에 저장합니다. 나는 두 개의 엔티티 Stock (name)과 DailyStockData (Date, number)를 가지고 있으며 각 엔티티 엔티티에 대해 2 년의 정보를 저장한다. 그런 다음 사용자는 TableView에서 일부 주식 이름을 삭제할 수 있습니다.CoreData에서 어떻게 빨리 지울 수 있습니까?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 이 재고 및 DailyStockData 캐스케이드를 삭제하고 컨텍스트를 저장합니다. 코드를 저장 내

은 문제가이

// Save the context. 
NSError *error = nil; 
if (![context save:&error]) 
{ 
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 

과 같습니다 빠른 사용자 삭제 주식 - 내 응용 프로그램의 충돌. 내 장치가 이전 트랜잭션 삭제를 저장하지 않았을 때 그 이유가 "중단"명령임을 이해하고 다시 저장하도록 요청합니다.

여기에 두 가지 질문이 있습니다 ^) 1.이 충돌을 방지 할 방법이 있습니까? 2. 컨텍스트 저장 오류를 처리하는 가장 좋은 방법은 무엇입니까? 나는 다만 그것을 중단하기보다는 오히려 그것을 반복해서 시도 할 수있다.

가장 간단한 해결책은 컨텍스트를 "매우"마지막으로 저장하는 재 설계 응용 프로그램입니다. 예를 들어 내 응용 프로그램이보기를 변경하거나 모든 것을 알기를 원합니다.

+0

실제 오류 텍스트를 게시하는 것이 도움이 될 수 있습니다. –

+0

도서의 예제는 개발자에게 실패를 경고하기를 원하기 때문에 중단됩니다. 출시 앱에는 절대 중단하지 않을 것입니다. 대신 오류를 잡아서 기록하고 분석하고 적절한 조치를 취해야합니다. – TechZen

답변

3

"저장"을 자주 호출해서는 안되며 성능이 좋지 않습니다.

"저장"방법을 사용하면 실제로 수정 된 데이터가 디스크에 저장되므로 많은 양의 데이터를 저장해야하는 경우 시간이 오래 걸릴 수 있습니다.

앱이 종료되거나 배경이 충분하면 한 번만 저장하십시오.

예기치 않은 충돌로 인해 일부 데이터가 손실 될 것을 염려 할 경우 사용자가 데이터 수정을 잠시 중단하거나 앱의 편집보기를 종료 할 때 '저장'을 호출 할 수 있습니다. 그것은 귀하의 결정에 달려 있지만 데이터가 변경 될 때마다 저장하지 마십시오.

+0

작은 변화가있을 때마다 매번 컨텍스트를 저장하는 CoreData에 관한 책에서이 습관을 형성합니다. – Sergnsk

0

나는 CoreData를 사용하여 데이터베이스를 만들지 만 시뮬레이터를 사용하여 정보를 데이터베이스에 저장하지 않습니다. Navicat lite를 사용하여 정보를 데이터베이스에 저장합니다. 전체 데이터베이스를 삭제하려면 user/library/application support/iphone simulator // applications // documents/아래의 simulators 폴더에서 삭제하십시오. U 응용 프로그램 폴더와 동기화하지 않으면 전체 데이터베이스가 삭제됩니다.

0
  1. 이 충돌을 방지 할 수있는 방법이 있습니까?

예, abort()을 삭제하십시오. 오류를 기록, 분석 또는 응답하는 데 시간을 허비하지 않으려는 경우에만 중단 사례가 사소한 예제 코드에 사용됩니다. 실제 코드에서는 사용하지 않을 것입니다.

  1. 컨텍스트 저장 오류를 처리하는 가장 좋은 방법은 무엇입니까?

먼저 할 일은 당신이 실제로 실패하는 것을 몇 가지 아이디어를 가질 수 있도록 상세하게 오류를 기록합니다.

내 장치가 이 완료되지 않은 경우 "abort"명령을 이해하고 이전 삭제 트랜잭션을 저장하고 다시 저장하라는 명령을 이해합니다.

가능성이 낮습니다. 인간의 속도로 작동하는 UI 기반 동작이 모든 로컬 컴퓨터 작업에 과부하를주는 것은 거의 불가능합니다. 코어 데이터에 수백 개의 개체를 저장하는 데는 밀리 초가 걸리는 반면 UI에서 행을 삭제하려면 사람이 전체 초 이상을 필요로합니다. UI가 사용 중일 때 크래시가 발생하는 경우 오류는 아마도 UI와 관련됩니다. tableview에 대한 섹션 및 행 수를 제대로 업데이트하지 않습니다.

추측하지 마십시오. 저장 오류를 기록하고 실제로 어떤 일이 일어나고 있는지 확인하십시오.

+0

당신이 옳았습니다. 나는 충돌 로그에서 잘못된 스레드를 봅니다. 그것은 내 잘못 이었어 ^) CoreData가 아니었다. 나는 여기에 관해서 또 다른 질문을했다. - http://stackoverflow.com/questions/7083077/crash-when-calculate-data-and-draw-it-in-different-threads – Sergnsk

관련 문제