2012-03-31 4 views
0

SQLite 데이터베이스에 다음 값이 있습니다.Array 및 MutableArray에 객체 저장

열 1 ------ 열 2

"1" ------- "One" 

"2" -------"Two" 

"3" -------- "Three" 

이제

내가 모든 값을 읽고 NSArray에 저장해야합니다, NSMutableArray 등하지만 위에서 언급 한 배열 중 하나에 저장하면 데이터 순서가 변경되지 않아야합니다. 그것은 항상 데이터베이스에 남아 있어야합니다.

제 질문은 데이터의 순서를 변경하지 않고 무엇을 저장해야합니까? NSArray 또는 NSMutableArray입니까?

쿼리는 단순한 Select All 문입니다.

FMResultSet *results = [db executeQuery:@"SELECT * FROM PersonTable"]; 


     while([results next]) 
     { 

      Name *nam= [[Name alloc] init]; 

      nam.fname= [results stringForColumn:@"fname"]; 
      nam.lname= [results stringForColumn:@"lname"]; 

      [mutArray addObject:nam]; 
     } 

     [db close]; 

    }else { 
     NSLog(@"DB Close"); 
    } 

마지막으로 나는 MutableArray를 반환되며,이 경우에는 데이터의 mutArray

답변

1

배열을 만들 때 사용하는 코드는 괜찮습니다. 수신 한 순서대로 원하는 값으로 NSMutableArray을 만듭니다. NSMutableArrayNSSet과 달리 컬렉션으로되어 있으므로 변경 작업을 수행하지 않으면 주문이 보존됩니다.

을하지만 위에서 언급 한 배열 중 하나에 저장할 때 데이터의 순서는 변경하지 마십시오 :

난 당신이 무슨 뜻인지에 의해 조금 혼란 스러워요. 그것은 항상 데이터베이스에 남아 있어야합니다.

분명히 NSArray을 사용하면 변경 불가능하므로 해당 배열의 내용과 순서가 변경되지 않습니다. NSMutableArray을 가져 와서 불변으로 만들고 싶다면 NSArray *immutableCopy = [mutArray copy]을 설정하면됩니다.

그래도 NSMutableArray을 사용해도 앱이 실행되는 동안 배열이 아무 이유없이 수정되는 것과는 다릅니다. addObject:removeObjectAtIndex:sortUsingDescriptors:과 같은 호출을 사용하여 배열을 변경하려고 명시 적으로 호출하지 않으면 배열이 변경되지 않습니다. [DB를하는 executeQuery : @하는 "SELECT * PersonTable에서 '] 당신이 형식 하회

FMResultSet * 결과 =이 사전을 사용하여 데이터베이스에있는 것과 동일한 순서로 값을 기억

+0

그럼 내 코드가 괜찮다고 제안하면 어떤 변경도하면 안된다. – Illep

+0

또는'copy'를 사용하여 불변으로 만들 수 있습니다. 그렇게하는 데는 아무런 문제가 없습니다. 나중에 변경되는 데이터의 순서가 지나치게 걱정되는 것 같습니다. 그것은 명시 적으로하지 않으면 일어날 일이 아닙니다. – yuji

1

주문 데이터 유형에 따라 다릅니다하지 않습니다이다. 배열의 값을 추가/삭제/바꾸려면 NSMutableArray을 사용해야합니다. 그렇지 않으면 NSArray을 사용할 수 있습니다.

+0

어떻게 NSMutableArray 또는 NSArray에 sqlite 데이터베이스에 삽입 한 순서로 값을 저장할 수 있습니까? 예를 보여줄 수 있습니까? – Illep

+0

나에게 쿼리를 제공 –

+0

나는 내 질문을 업데이트하고 쿼리 등을 추가했습니다. – Illep

1

;

int i = 0; 
    while([results next]) 
    { 

     Name *nam= [[Name alloc] init]; 

     nam.fname= [results stringForColumn:@"fname"]; 
     nam.lname= [results stringForColumn:@"lname"]; 

     [myDictionary setObject:nam forKey:[NSString StringWithFormat:@"%d",i]]; 
     i++; 
    } 

    [db close]; 

}else { 
    NSLog(@"DB Close"); 
} 

이제 키가있는 사전이 있으며 키와 같은 순서로 값을 검색 할 수 있습니다. 희망이 당신을 도울 수 있습니다.