2011-03-01 3 views
5

iOS의 코어 데이터를 사용하여 기존 데이터 행을 업데이트하는 방법의 예를 찾을 수 없습니다. SQL의 측면에서, 나는 행을 따라 뭔가를 찾고있다 : UPDATE device SET attr1 = 'blah', attr2 = 'blah'WHERE deviceid = '1';iOS의 코어 데이터를 사용하여 레코드 업데이트

내가 다음과 같이 할 수 있음을 알고 있습니다. [device setValue : @ "blah"forKey : @ "attr1"];

그러나 deviceid = '1'에서만 어떻게 할 수 있습니까?

도움을 주시면 감사하겠습니다.

+4

핵심 데이터를 SQL 용어로 생각하는 것은 치명적인 실수입니다. 핵심 데이터는 때때로 객체 그래프를 유지하기 위해 SQL을 사용하는 객체 그래프 관리 시스템입니다. 핵심 데이터에서 엔티티는 테이블이 아니고 속성은 열이 아니며 managedObject는 행이 아닙니다. 자세한 내용은 [Tequila advice] (http://stackoverflow.com/questions/2350304/grouping-a-core-data-data-result/2350612#2350612) – TechZen

+1

+1 "엔티티는 테이블이 아니고 속성은 열이 아니며 managedObjects입니다. 행이 아닙니다 "... 그것에 멋진 일종의 선 (zen) 링이 있습니다. – GendoIkari

+2

이것은 나에게 도움이되지 않습니다. 코드 예제 또는 링크는 어떻습니까? – yupyupyup

답변

1

안전상의 이유로 lastObject 방법을 사용하십시오. executeFetchRequest:error:이 nil을 반환하면 프로그램이 중단됩니다.

NSManagedObject *device = [fetchedObjects lastObject]; 
13

Core Data를 사용하면 SQL 쿼리를 직접 실행하지 않고 개체의 값을 업데이트 한 다음 managedObjectContext를 저장함으로써 데이터베이스를 업데이트 할 수 있습니다.

예를 들어, 장치는 개체의 특정 인스턴스입니다 ... [device setValue:@"blah" forKey:@"attr1"];은 하나의 장치 개체 만 업데이트하므로 where 절은 필요하지 않습니다.

데이터베이스에서 올바른 장치 개체를 검색해야하는 경우 NSFetchRequest을 사용해야합니다. 핵심 데이터의 작동 방식을 이해하려면 Core Data Programming Guide을 살펴 보는 것이 좋습니다. SQL 문과 WHERE 절에 대해 묻는다면, 핵심 데이터가 무엇인지에 대한 잘못된 견해가있는 것 같습니다.

+0

네, SQL이 아닌 걸 압니다. 하지만 가져 오기 요청을 한 후에 엔티티 값을 설정하는 데 문제가 있습니다. 예를 들어, 다음 코드를 사용하여 fetchrequest를 수행합니다. – yupyupyup

+0

// 장치 레코드 가져 오기 \t NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init]; \t NSEntityDescription 엔티티 * = [NSEntityDescription \t \t \t \t \t \t \t \t entityForName "장치"inManagedObjectContext @ 콘텍스트]; \t [fetchRequest setEntity : entity]; \t \t NSPredicate * predicate = [NSPredicate predicateWithFormat : @ "(deviceid = % d)", deviceidint]; \t [fetchRequest setPredicate : predicate]; – yupyupyup

+0

하지만이 엔티티에서 값을 업데이트하려고하면 오류가 발생합니다. – yupyupyup

관련 문제