2012-03-31 80 views
0

我在我的SQLite數據庫中有以下值;保存對象Array和MutableArray

列1 ------列2

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

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

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

等。

現在我需要閱讀所有這些值,並將其保存到一個NSArrayNSMutableArray等等。但是,當我將它存儲在上面提到的數組中的一箇中,數據的順序不應該改變。它應該始終保持原樣在數據庫中。

所以我的問題是,我應該保存它,而不改變數據的順序?是NSArray還是NSMutableArray

該查詢將是一個簡單的選擇所有語句;

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

你用來創建你的數組的代碼很好:它會按照接收的順序創建一個你想要的值的NSMutableArrayNSMutableArray訂購集合不像NSSet,所以排序將被保留,除非你做一些改變它。

我對你所說的這個東西有點糊塗:

但是,當我把它存儲在上述陣列的一個數據的順序不應改變。它應該始終保持原樣在數據庫中。

顯然,如果您使用NSArray,它是不可變的,所以該數組的內容和順序將永遠不會改變。如果你想採取NSMutableArray並使其不可變只是做NSArray *immutableCopy = [mutArray copy],你會被設置。

即使您使用的是NSMutableArray,它仍然不像您的應用程序運行時陣列會無故修改自己。除非你明確地調用數組來改變數組,如addObject:removeObjectAtIndex:sortUsingDescriptors:這樣的調用,數組不會改變。

+0

所以你建議我的代碼很好,我不應該對它做任何改變? – Illep 2012-03-31 08:03:22

+0

或者你可以使用'copy'使它不可變。這樣做沒有任何問題。我只是指出,你似乎過分擔心稍後數據更改的順序。除非你明確地這樣做,否則這不會發生。 – yuji 2012-03-31 08:04:44

1

訂貨數據的不依賴於數據類型。如果您需要添加/刪除/替換陣列中的任何值,則應使用NSMutableArray,否則可以使用NSArray

+0

我如何將值保存到NSMutableArray或NSArray中,我已經插入到sqlite數據庫中。你能告訴我一個例子嗎? – Illep 2012-03-31 07:00:10

+0

給我查詢 – 2012-03-31 07:29:41

+0

我已經更新了我的問題,添加了查詢等。 – Illep 2012-03-31 07:40:21

1

爲以相同的順序存儲的值,因爲它是在數據庫可以使用字典以下格式

FMResultSet *結果= [分貝的executeQuery:@「SELECT * FROM代碼PersonTable」];

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"); 
} 

現在你已經有了帶鍵的字典,你可以用鍵以相同的順序檢索值。希望這對你有所幫助。