2012-07-24 3 views
2

여러 CGRect의 좌표와 크기를 포함하는 NSMutableArray가 있습니다. 나는 이것을 sqlite에 저장하려고한다. 배열 전체를 저장할 수 있습니까? 아니면 CGRect를 데이터베이스에 수동으로 저장해야합니까?NSMutableArray를 Sqlite에 저장하기

UPDATE :

62706c69 73743030 d4010203 04050817 18542474 6f705824 6f626a65 63747358 24766572 
73696f6e 59246172 63686976 6572d106 0754726f 6f748001 a3090a0f 55246e75 6c6cd20b 
0c0d0e5a 4e532e6f 626a6563 74735624 636c6173 73a08002 d2101112 16582463 6c617373 
65735a24 636c6173 736e616d 65a31314 155e4e53 4d757461 626c6541 72726179 574e5341 
72726179 584e534f 626a6563 745e4e53 4d757461 626c6541 72726179 12000186 a05f100f 
4e534b65 79656441 72636869 76657208 11161f28 32353a3c 40464b56 5d5e6065 6e797d8c 
949dacb1 00000000 00000101 00000000 00000019 00000000 00000000 00000000 000000c3 

그것은 정확히 내가 데이터베이스 안에 넣어 전에 한 과 동일합니다 :

이것은 내가 데이터베이스에서 검색 한 데이터입니다.

강령 :

이 내가있는 NSArray 보관되고 있는지 확인하기 위해 사용하고있는 코드입니다. NSKeyedUnarchive가 작동하는지 확인하기 위해 아직 데이터베이스에 저장하지 않습니다. 여기있다 :

NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:rectsArray]; 
    NSLog(@"The data %@", toData); 
    NSArray *fromData = [NSKeyedUnarchiver unarchiveObjectWithData:toData]; 
    NSLog(@"The data %@", fromData); 

toData

는 보관 된 양식을 보여 주지만 fromData는 아무 것도 표시되지 않습니다. 왜 이런 일이 일어나는 걸까요? 당신이 볼 수 있듯이, 그것은 CGRects의 배열입니다

(
"NSRect: {{83.389008, 179.61432}, {8.775116, -10.616217}}", 
"NSRect: {{83.389008, 179.61432}, {8.775116, -10.616217}}", 
"NSRect: {{83.389008, 179.61432}, {8.775116, -10.616217}}", 
"NSRect: {{96.085426, 179.61432}, {5.2029028, -10.616217}}", 
"NSRect: {{101.28833, 179.61432}, {5.8532658, -10.616217}}", 
"NSRect: {{107.1416, 179.61432}, {4.5525398, -10.616217}}", 
"NSRect: {{115.61544, 179.61432}, {3.2518141, -10.616217}}", 
"NSRect: {{115.61544, 179.61432}, {3.2518141, -10.616217}}", 
"NSRect: {{118.86726, 179.61432}, {6.5036283, -10.616217}}", 
"NSRect: {{118.86726, 179.61432}, {6.5036283, -10.616217}}" 
) 

: 여기

rectsArray의 샘플입니다.

+0

코어 데이터를 사용하고 있습니까? – sgress454

+0

음 ... 직접 sqlite에 액세스합니다. –

+0

rectsArray의 예를 게시 할 수 있습니까? – sgress454

답변

3

좋아요. 이것은 Core Data로는 좀 더 쉽지만 기본 사항은 같습니다. 배열 데이터를 아카이브를 사용하여 NSData 객체에 저장해야합니다.

NSData *dataFromArray = [NSKeyedArchiver archivedDataWithRootObject:myArray]; 

그런 다음 해당 데이터를 데이터베이스에 blob로 저장해야합니다.

const char *arrayBytes = [dataFromArray bytes]; 

, 당신이 얻을 밖으로 다시 데이터를 얻을 : 당신이 사용하는 SQLite는 래퍼에 따라, 그렇지 않으면 당신은 원시 바이트 얻을 수하는 방법을 NSData 객체를 복용하고 바이트로 번역이있을 수 있습니다 데이터베이스의 바이트를 NSData 객체로 다시 가져온 다음이를 보관 취소합니다.

NSArray *myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:dataFromDB]; 

을 그리고 당신은 당신의 배열을 다시해야합니다 : 데이터베이스에서와 dataFromDB라는있는 NSData 객체로 덩어리를 얻을 수 있다고 가정하면, 당신은 할 것입니다!

+0

감사합니다 스콧! 나는 이것을 먼저 시도해보고 그것이 효과가 있었는지 알려줄 것입니다. –

+0

질문이 있습니다. NSData를 바이트로 변환해야하는 이유는 무엇입니까? NSData를 sqlite에 완벽하게 삽입 할 수 있습니다. 그것은 다른가요? –

+0

Nope. SQLite 래퍼가 NSData를 가져 와서 데이터베이스에 저장할 수 있다면 좋은 결과를 얻을 수 있으며 바이트로 변환하는 부분은 건너 뛸 수 있습니다. SQLite BLOB를 직접 작성해야 할 경우를 대비해서 언급했습니다. – sgress454