0

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

我试图保存它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 String 的项目。我如何存储不同的网址。喜欢

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

名称网站:hitechnology url:hitechnology.com 标题:Hitechnology 评论:hmmm

安苏上..

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

4

4 回答 4

2

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

于 2013-01-22T13:35:34.937 回答
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"]);
}
于 2013-01-22T12:39:20.910 回答
1

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

于 2013-01-22T12:29:17.933 回答
1

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

NSMutableArray *bookmarkArray = [[NSMutableArray alloc]init];
[bookmarkArray addObject:data];
于 2013-01-22T13:22:27.420 回答