如何从plist到tableview写入和读取数据

时间:2013-01-22 11:51:27

标签: objective-c plist bookmarks

您好我正在尝试为我的浏览器制作书签。 页面标题,页面网址,与页面相关的任何评论。

我尝试将其保存在plist中,但未成功。任何人都可以帮助我将这些东西保存到plist并在表格视图中进行检索。因此,当用户点击标题时,它会在UIWebView中打开网址。

到目前为止,这是我尝试过的代码:

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"bookmarks.plist"]; 

NSFileManager *fileManager = [NSFileManager defaultManager];

if (![fileManager fileExistsAtPath: path])
{
      NSString *bundle = [[NSBundle mainBundle] pathForResource:@"bookmarks" ofType:@"plist"];
        [fileManager copyItemAtPath:bundle toPath: path error:&error]; //6
}
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

NSString *writeUrl = @"Page URL One";
NSString *writeTitle = @"Page Title One";
NSString *writeComment = @"Page comments";

[data setObject:[NSString stringWithString:writeUrl] forKey:@"url"];
[data setObject:[NSString stringWithString:writeTitle] forKey:@"title"];
[data setObject:[NSString stringWithString:writeComment] forKey:@"comment"];
[data writeToFile: path atomically:YES];

NSMutableDictionary *savedUrl = [[NSMutableDictionary alloc] initWithContentsOfFile: path];

NSString *value;
value = [[savedUrl objectForKey:@"url"] stringValue];
NSLog(@"%@", value);

更新:我成功保存并从plist中检索数据。问题出现在这一行

value = [[savedUrl objectForKey:@"url"] stringValue];

通过删除stringValue来解决问题。

 value = [savedUrl objectForKey:@"url"];

现在我的第二个问题。我在plist文件中创建了三个名为url,title,comment,types的类型的项目。 我如何存储不同的网址。喜欢

名称网站:inforains 网址:inforains.com 标题:Info Rains 评论:好的网站文章

名称网站:hitechnology 网址:hitechnology.com 标题:Hitechnology 评论:嗯......

ans soo on ..

如何存储这样的数据..所以所有名称网站都会在tableview上显示,当用户点击任何人时,将显示与该网站相关的数据。我希望我清楚我的问题。

4 个答案:

答案 0 :(得分:2)

将多个记录存储为plist文件中名为url,title,comment,types的三个项目 将类型从字符串更改为字典,并将每个字典中的数据单独存储为1,2,3 ... 要么 对每个url,title和comment使用三个可变数组,并在保存时在索引0处添加对象。 并在需要时作为nsmutable数组访问它们。

答案 1 :(得分:1)

你确定[data writeToFile:path atomically:YES];作品?它返回一个BOOL,你应该检查一下。 你确定savedURL!= nil?

答案 2 :(得分:1)

更改此行

value = [[savedStock objectForKey:@"url"] stringValue];

value = [savedUrl objectForKey:@"url"];

因为你在字典中保存NSString ...而不是NSNumber。

第二期:

//create mutable array to save all objects
NSMutableArray *objectsArray = [data objectForKey:@"objectsArray"];
if(!objectsArray) {
    objectsArray = [[NSMutableArray alloc] init];
}

//create and add dictionary into array
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:@"url1", @"title1", @"comment2",nil] forKeys:[NSArray arrayWithObjects:@"url", @"title", @"comment",nil]];

[objectsArray addObject:dictionary];

[data setObject:objectsArray forKey:@"objectsArray"];

[data writeToFile: path atomically:YES];


// to read data
NSMutableDictionary *savedUrl = [[NSMutableDictionary alloc] initWithContentsOfFile: path];
NSMutableArray *objectsArraySAved = [savedUrl objectForKey:@"objectsArray"];
for (NSMutableDictionary *dic in objectsArraySAved) {
    NSLog(@"URL %@", [dic valueForKey:@"url"]);
}

答案 3 :(得分:1)

对于您的新问题,您应该将所有词典放在一个可变数组中。

NSMutableArray *bookmarkArray = [[NSMutableArray alloc]init];
[bookmarkArray addObject:data];