2013-10-15 2 views
0

나는 목록 응용 프로그램을 간단하게 작성했습니다. 동적으로 생성 된 텍스트 필드를 프로그래밍 방식으로 작업에 사용합니다 (일부 사용자 지정 애니메이션 및 기타 사용하려는 UITableView 때문에 UITableView를 사용하지 않았습니다).UITableView가없는 응용 프로그램에서 핵심 데이터 사용

사용자는 자신의 작업으로 각각 여러 개의 목록 (집, 직장, 학교 등)을 만들 수 있습니다.

나는 정보

정보를 저장하는 것은 충분히 간단하지만 갇히지있어 어디에 내 핵심 데이터 오브젝트 (목록 및 작업)하는 업데이트를 저장하는 코어 데이터를 사용하고 싶습니다. 또한 코어 데이터를 사용하여 특정 작업을 특정 목록과 연관시키는 방법.

My Data Model

난 아무것도 명확히해야하는 경우 알려주세요.

답변

0

질문에 완전히 명확하지는 않지만 관리 대상 개체를 업데이트하는 작업은 간단합니다. 당신이 초기 추가하고있는 경우에는이 같은 코드를 사용할 수 있습니다 (AN 유사을 SQL에서 "삽입") : 새 항목을 삽입하기 위해 관하여

NSManagedObject *obj; 
obj = [NSEntityDescription insertNewObjectForEntityForName:@"UserData" inManagedObjectContext:context]; 
[obj setValue:user forKey:@"userName"]; 
[obj setValue:goalCategory forKey:@"goalCategory"]; 
[obj setValue:goalDetail forKey:@"goalDetail"]; 
NSError __autoreleasing error; 
[context save:&error]; 

합니다. 작업중인 관리 객체를 찾은 후 업데이트하려면 관리 객체의 값을 변경하고 [context save : & 오류]를 사용하면됩니다. 다음은 그 예입니다.

UserData *uData = (UserData *) managedObj; 
uData.itemName = nameText; 
NSError __autoreleasing *error; 
[context save:&error]; 

꽤 많이 있습니다. 당신은 업데이트 할 수있는 객체 (들)을 선택하면

는 업데이트에 관해서는, 그들은는있는 NSArray입니다

fetchedResultsController.fetchedObjects 

에 포함되어 있습니다. 그래서, 당신은 같은 것을 할 수 있습니다

UserData *uData = (UserData *) [fetchedResultsController.fetchedObjects objectAtIndex:3]; 
uData.completed = YES; 
NSError __autoreleasing *error; 
[context save:&error]; 

그래서, 이것은 fetchedObjects 배열의 인덱스 3에있는 개체에 대해 YES ==가되도록 UserData를 엔티티에 완료 필드를 업데이트합니다.

다른 업데이트 방법과 많은 옵션이 있지만 그럴 필요가 없다는 것을 알고 있습니다. fetchedObjects는 가져 오기에서 반환 한 항목을 포함하는 배열입니다. 그들을 업데이트하고 각 객체를 엔티티 (NSManagedObject로 정의 됨)에 캐스팅 한 다음 변경 사항을 컨텍스트 저장합니다.

HTH.

+0

제 질문이 더 명확하게 업데이트되었습니다. 당신이 내게 준 첫 번째 코드 스 니펫은 의미가 있습니다. 이해하는 정보 저장. 그것은 내가 잃어버린 특정 객체 (예를 들어, 일단 편집되거나 완료되었다고 표시되는 Task 객체)를 업데이트하는 것입니다. – LazerLex

+0

응답의 수정본을 참조하십시오. – RegularExpression

0

가장 좋은 내기는 NSFetchedResultsController입니다. Xcode 템플릿에서 제안한 패턴과 똑같이 사용할 수 있습니다 (새 프로젝트 마스터 - 디테일을 만들고 "사용자 코어 데이터"를 확인하여 볼 ​​수 있습니다).

당신은 장치 개체 모델 이름에 대한 문자열 속성뿐만 아니라 나는 또한 주문에 대한 타임 스탬프 어쩌면 일련 번호를 추천 등의 완료에 대한 NSNumber 부울 속성 (기업 Task) (I 신뢰할 NSOrderedSet 찾을 수 있습니다). 엔티티 List은 일대일 관계가 Task이어야합니다. 꽤 직설적 인.당신이 objectAtIndexPath를 사용할 수 없기 때문에

List <---->> Task 

유일한 차이점은 오른쪽 개체를 찾기 위해 지금이다. 색인을 fetchedResultsController.fetchedObjects에 사용할 수 있습니다. 그냥 개체가 예상대로 주문되었는지 확인하십시오.

+0

내가하는 일을 볼 수 있도록 내 데이터 모델의 이미지를 추가했습니다. 내가 제안한 타임 스탬프를 추가했습니다. 감사합니다. 내 질문에 언급 한 NSFetchedResultsController 함께 할 수있다. 그것을 사용하는 방법을 조금 더 설명해 주시겠습니까? – LazerLex

+0

첫 번째 단락에서 설명한대로 템플릿을 사용하여 새 프로젝트를 시작하기 만하면됩니다. 마스터 뷰 컨트롤러를 통해 읽어 와서 가져온 결과 컨트롤러가 테이블보기에서 데이터를 구동하는 방법을 확인하십시오. – Mundi

+0

위에서 언급 한 템플릿을 보았습니다. 사용 된 기술은 UITableViews에서 핵심 데이터를 사용하는 데 특정적인 것으로 보입니다. 내가 볼 수있는 리소스는 테이블 뷰없이 핵심 데이터를 사용하는 방법을 알 수 있도록 도와줍니다. – LazerLex

0

우선, 프로젝트에 핵심 데이터를 사용하는 것이 좋습니다. 당신의 모델이 가볍고 단순하다면 plists를 사용하는 것이 더 나을 것입니다.

  1. 각 스레드가 별도의 NSManagedObjectContext를 소유; 당신이 코어 데이터를 선택하는 경우 , 그냥이 규칙을 기억
  2. 해당 스레드에서만 컨텍스트로 작업을 수행하십시오.

이제 최적화에 대해 걱정할 필요가 없습니다. 스토리지를 업데이트하는 모든 구성을 실현하십시오. 작동하는지 확인하십시오. 그런 다음 다른 업데이트 방법을 시도해야합니다.

+0

코어 데이터는 저장해야하는 여러 사용자 지정 개체가 있기 때문에 가장 좋은 방법이라고 생각합니다. 데이터 모델의 이미지를 추가하여 어떤 구조의 구조를 볼 수 있으며 필요하다고 생각하는 이유를 확인할 수 있습니다 핵심 데이터를 사용합니다. – LazerLex

관련 문제