将对象保存到Array和MutableArray

时间:2012-03-31 06:47:43

标签: iphone objective-c

我的SQLite数据库中有以下值;

Column1 ------ Column2

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

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

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

等。

现在我需要读取所有这些值并将其保存到NSArrayNSMutableArray等。但是当我将其存储在上述阵列之一时,数据的顺序不应该改变。它应该始终保持在数据库中。

所以我的问题是我应该在不改变数据顺序的情况下将其保存到什么位置?是NSArray还是NSMutableArray

Query将是一个简单的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

3 个答案:

答案 0 :(得分:1)

数据排序不依赖于数据类型。如果您需要添加/删除/替换数组中的任何值,则应使用NSMutableArray,否则您可以使用NSArray

答案 1 :(得分:1)

用于创建数组的代码很好:它会按照您收到的顺序使用您想要的值创建NSMutableArrayNSMutableArray有序集合,与NSSet不同,因此除非您做一些更改,否则将保留排序。

我对你的意思有点困惑:

  

但是当我将它存储在上述阵列之一时,数据的顺序不应该改变。它应该始终保持在数据库中。

显然,如果使用NSArray,它是不可变的,因此该数组的内容和顺序永远不会改变。如果您想取NSMutableArray并使其成为不可变的,只需执行NSArray *immutableCopy = [mutArray copy]即可设置。

尽管如此,即使您使用NSMutableArray,也不会在您的应用运行时数据无缘无故地自行修改。除非您通过addObject: removeObjectAtIndex:sortUsingDescriptors:之类的调用显式调用数组,否则数组不会更改。

答案 2 :(得分:1)

用于以与数据库中相同的顺序存储值,您可以使用以下格式的字典

FMResultSet * results = [db 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");
}

现在你有了带密钥的字典,你可以用密钥以相同的顺序检索值。希望这能帮助你。