2010-03-10 5 views
0

코어 데이터를 사용하여 영구 데이터 (NSManagedObjects)의 시리즈을 sqlite에 쓰고 해당 시리즈를 애플리케이션으로 읽으려고합니다. 나는 하나의 세션 동안 단일 레코드를 읽을 수 있었지만, 나는 이전의 데이터가로드되지 않고 (그리고 sqlite 관리자는 테이블을 인식하지만 테이블의 엔트리를 인식하지 못함) 앱을 다시로드 할 때마다 그 레코드를 읽었습니다.iPhone의 지속성 코어 데이터

아래 applicationDidFinishLaunching에서

: 나는 그런

[event setDateCreated:[NSDate date]]; 
로, managedObjectContext를 설정 3 컨트롤러 inputControl에서 다음
inputControl.managedObjectContext = context; 
reportControl.managedObjectContext = context; 
logControl.managedObjectContext = context; 

내가 이벤트 NSManagedObjects 추가의 자산 여기

는 핵심 데이터 로직의 일부이다

및 logControl에서 이벤트 로그를 읽습니다.

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 


NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"dateCreated" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 

NSError *error; 
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 
if (mutableFetchResults == nil) { 
    NSLog(@"Error fetching from DB"); 
} 
int i; 
NSLog(@"size of DB: %d",mutableFetchResults.count); 
for (i=0; i<mutableFetchResults.count; i++) 
    NSLog(@"event %d: %@",i,[mutableFetchResults objectAtIndex:i]); 

[mutableFetchResults release]; 
[request release]; 

이 코드를 실행할 때 "DB의 크기 :"가 항상 '1'로 설정되어 있습니다. managedObjectModel, managedObjectContext 및 persistentStoreCoordinator는 표준 방식으로 처리됩니다.

어떤 도움을 많이

당신에게

Peyman

+0

SQLite는 관리자가 전혀 도움이되지 않습니다 당신의 도움에 대해 감사합니다. 핵심 데이터 편집기 (http://christian-kienle.de/CoreDataEditor/) –

답변

3

당신이 당신의 managedObjectContext를 저장하는 감사 감사하겠습니다?

NSError *error = nil; 
if (![context save:&error]) { 
    // Handle the error 
} 

당신은 당신의 컨텍스트에 배치 한 객체를 가져올 수 있습니다,하지만 당신은에 영구 저장소에 컨텍스트를 저장하지 않으면, 그들은 가능한 다음 시간되지 않습니다.

+1

과 같은 것을 사용해야 할 것입니다. 이것은 좋은 대답입니다 만, 절대로 ** 저장하지 않으셔도됩니다. 항상 오류를 전달하고 오류를 확인하십시오. 예 : 심지어 –

+0

안녕 Kubi. 예 컨텍스트를 저장 중입니다. 나는 도우미 함수를 사용하고있다. - (void) writeDB { \t NSError * error; \t if (! [managedObjectContext save : & error]) { \t \t // 오류를 처리합니다. \t} } – Peyman

0

save으로 전화를 거는 곳은 어디입니까? NSPersistentStoreCoordinator로 플러시하지 않을 수도 있습니까?

+0

안녕하세요, iPhoneDollaraire.예 헬퍼 함수를 ​​호출하여 컨텍스트를 저장합니다. - (void) writeDB { \t NSError * 오류; \t if (! [managedObjectContext save : & error]) { \t \t // 오류를 처리합니다. \t} } – Peyman

0

문제점을 발견했습니다. 필수 속성이 저장하기 전에 설정되지 않았기 때문에 컨텍스트가 저장되지 않았습니다 (오류 1520).

는 CoreData에 의해 저장된 데이터를 조사 할 때

Peyman

+0

그런 다음 쿠비가 맞았습니다. –