2012-03-31 76 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"); 
} 

现在你已经有了带键的字典,你可以用键以相同的顺序检索值。希望这对你有所帮助。