在开始之前,我正在以编程方式创建plist
我在plist中以编程方式存储图像的路径名。保存时,我使用了NSLog,以下是我所拥有的
2013-08-04 15:25:24.044 XXX[12595:13d03] inserting data is 5===http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-08-04-07-42-37.25_tstdddd.png
2013-08-04 15:25:24.057 XXX[12595:13d03] inserting data is 4===http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-08-04-07-18-20.673_iphone_2.jpg
2013-08-04 15:25:24.086 XXX[12595:13d03] inserting data is 2===http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-07-21-03-14-29.292_Spare-Parts-summer-Ad-hyundai.jpg
2013-08-04 15:25:24.087 XXX[12595:13d03] inserting data is 1===http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-07-21-03-11-55.395_horizon.jpg
2013-08-04 15:25:24.089 XXX[12595:13d03] inserting data is 6===http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-08-04-08-03-29.371_2010.jpg
以id 5,4,2,1,6输入数据。
现在,当我阅读这些数据时,下面是我得到的内容。
2013-08-04 15:27:28.251 XXX[12595:13d03] fetching URL == http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-08-04-07-18-20.673_iphone_2.jpg
2013-08-04 15:27:28.252 XXX[12595:13d03] fetching URL == http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-08-04-07-42-37.25_tstdddd.png
2013-08-04 15:27:28.252 XXX[12595:13d03] fetching URL == http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-07-21-03-11-55.395_horizon.jpg
2013-08-04 15:27:28.252 XXX[12595:13d03] fetching URL == http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-08-04-08-03-29.371_2010.jpg
2013-08-04 15:27:28.252 XXX[12595:13d03] fetching URL == http://www.mysite.com/faces/ProjectUploadFiles/hotDeals/mobile_2013-07-21-03-14-29.292_Spare-Parts-summer-Ad-hyundai.jpg
表示在获取时我获得了4,5,1,6,2
的数据当我双击plist时,我的数据有id排序,即我的数据为1,2,4,5,6。
任何想法为什么plist提供随机数据?
以下是生成的plist的屏幕截图。
对于存储数据,以下是我的代码。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
news = [NSJSONSerialization JSONObjectWithData:data options:nil error:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Offers.plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
if(![[NSFileManager defaultManager] removeItemAtPath:path error:&error])
{
//TODO: Handle/Log error
NSLog(@"files not deleted...");
} else {
NSLog(@"files deleted...");
}
if (![fileManager fileExistsAtPath: path])
{
path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"Offers.plist"] ];
}
NSMutableDictionary *data002 = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
if ([fileManager fileExistsAtPath: path])
{
data002 = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
}
else
{
// If the file doesn’t exist, create an empty dictionary
data002 = [[NSMutableDictionary alloc] init];
}
int count;
for (count = 0; count < (int)[news count]; count++)
{
[data002 setObject:[[news objectAtIndex:count] objectForKey:@"imagePath"] forKey:[[news objectAtIndex:count] objectForKey:@"id"]];
[data002 writeToFile:path atomically:YES];
}
[data002 release];
}
我所做的是代替NSMutableDictionary我使用了NSMutableArray并且完美无缺。
答案 0 :(得分:0)
你plist是一个字典,它没有顺序,只有键和值。如果您需要存储订单,则更改为使用数组(字典)或使用其他文件存储订单。
data002
是一本字典。这就是使你的plist成为字典的原因(当你打电话给writeToFile:
时)。如果要维护相对顺序,则需要确定要采用的方法,然后按顺序创建NSArray
个项目,并使用阵列上的writeToFile:
进行保存。
答案 1 :(得分:0)
通常,为了维护顺序数据,您必须在plist文件中使用字符串数组,而不是直接将字符串插入根元素(这是一个字典)。或者,如果您希望存储更复杂的实体,我建议将它们编入索引并在单独的数组中单独引用索引以维持顺序。
点击“+”符号添加元素,然后从“类型”下的下拉菜单中选择“数组”
如果您在代码中执行此操作,只需在NSDictionary中插入一个NSArray作为对象,您将其保存为plist:
[data002 setObject:@[path1,path2,path3] forKey:@"orderedArray"];