2011-04-27 2 views
0

저는 C 라이브러리를 사용하는 프로젝트에서 작업했으며 프로젝트는 일부 c struct를 coredata에 저장해야합니다. 그것을 객관적인 객체로 변형시키지 않으면 어떻게 할 수 있습니까?CoreData에서 C 기반 구조체 검색

Opencv 구조체 (CvMat *)를 저장하려고합니다. 내가 coredata에서 cvMat 구조체를 검색 할 때

/* binding stuff example*/ 
CvMat *mat = cvCreateMat(3, 3, CV_32FC1); 
// fill the matrix.. 
human.projVal = [NSData dataWithBytes:mat length:sizeof(mat)]; 
// then store it in core data 
.. 


/* retrieving stuff */ 
.. 
NSData *data = [[humansArray objectAtIndex:0] projVal];  
CvMat *mat = (CvMat *)[data bytes]; 
NSLog(@"cols =>> %i rows =>> %i",mat->cols,mat->rows); 

for (int i=0; i<9; i++) { 
    NSLog(@"%f",mat->data.fl[i]); 
} 

, 나는 이상한 COLS 행 값도 데이터 값을 얻는다. 나는 그 문제가 무엇인지 이해할 수 없다. 사전에

감사합니다 ..

답변

0

당신은 기본 값으로 저장할 수 있고이를 재 작성하십시오.

또는 "변형 가능"속성으로 저장할 수 있습니다. Core Graphics는 CGRect와 같은 다양한 구조체 유형과 비슷한 것을 가지고 있습니다. 데이터 모델에서 유형을 "변환 가능"으로 표시 한 다음 엔티티 클래스에 getter 및 setter를 명시 적으로 작성하십시오.

코어 그래픽처럼 속성을 문자열로 변환하는 함수를 만들어야합니다. CGRectFromString 및 NSStringFromCGRect.

여전히 이진 데이터로 저장하려는 경우이 링크의 여기에 설명 된 내용 (How to store custom objects with struct in Coredata)을 사용하여 더 많은 인코딩 및 디코딩 성공을 거둘 수 있습니다.

0

... 내 프로젝트는 coredata에 일부 구조체를 저장해야합니다. 이것을 객체로 변환하지 않으면 어떻게합니까? 객체로 변환하지 마십시오.

정말 안정적으로 수행 할 수 없습니다. 핵심 데이터 저장 객체 및 구조체는 객체가 아닙니다. 원칙적으로 구조체를 데이터 객체로 변환 할 수 있지만 다른 하드웨어가 데이터를 해석하는 방식 때문에 취약한 솔루션입니다. 다른 사람이 가게를 다른 장치로 옮기면 구조체가 다르게 나올 수 있습니다.

가장 안전한 솔루션은 구조체를 개체 값으로 변환 한 다음 다시 되돌려주는 변환기를 작성하는 것입니다. 두 int 값을 가진 구조체가 있다고 가정 해보십시오. 각 int를 NSNumber로 변환하여 배열에 넣은 다음 배열을 데이터 속성에 아카이브로 저장합니다. 또는 구조체를 모방 한 엔티티를 작성할 수 있습니다. 나는 후자의 방법을 선호한다.