gpt4 book ai didi

ios - 自动命名 NSUserDefaults

转载 作者:行者123 更新时间:2023-11-29 04:46:33 25 4
gpt4 key购买 nike

请原谅,因为这有点难以解释。我会尽力的!

所以,我正在创建书签。我已经将 WebView 的 URL 带到了表格中,您可以在其中设置并显示它。这对于一个书签来说效果很好。代码如下所示:

//Gets Page (currentAddress is the address of the webview passed to the bookmarks)
NSString *address = [defaults objectForKey:@"currentAddress"];

//Adds Set URL To Defaults (defaults is the name for the NSUserDefaults declaration)
[defaults setObject:address forKey:@"savedAddress1"];

//Adds To Array (favorites is the mutable array that the table displays)
[favorites addObject:address];

//Syncs Defaults
[defaults synchronize];

//Animate Back To Home Screen
[self dismissModalViewControllerAnimated:YES];

但是,当您添加新书签时,它们只会相互覆盖。你如何能够连续命名它们,这样它们就不会自动地互相覆盖?请记住,我需要知道如何获取要删除的索引,并检查它是否为零。

所以,如果您有什么可以在这种情况下帮助我的,那就太好了。我在想也许可以在 NSUserDefaults 中使用数组来跟踪,但同样,我不知道,我需要你的帮助!

感谢您的宝贵时间!

-- jack

最佳答案

如果您的数据结构变得太复杂,您应该考虑另一种存储方法。

您可能可以使用NSDictionary,其中键是书签的名称,值是书签地址。

{
"Google" = "http://google.com"
}

加载数据源时,您应该从 NSUserDefaults 获取字典

self.bookmarks = [[userDefaults dictionaryForKey:URDictionaryKey] mutableCopy];

为了保持表格有序,您可以创建一个已排序的字典键的 NSArray

self.bookmarkKeys = [[self.bookmarks allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

对于您的数据源方法,您可以使用类似的内容

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
return [self.bookmarkKeys count];
}

对于单元配置,您可以使用以下内容:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}

NSString *title = [self.bookmarkKeys objectAtIndex:indexPath.row];
cell.textLabel.text = title;
cell.detailTextLabel.text = [self.bookmarks objectForKey:title];

return cell;
}

如果用户删除表中的一行,您将执行以下操作:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;
{
if (editingStyle == UITableViewCellEditingStyleDelete) {

NSString *key = [self.bookmarkKeys objectAtIndex:indexPath.row];
[self.bookmarks removeObjectForKey:key];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.bookmarks forKey:URDictionaryKey];
[defaults synchronize];

}
}
<小时/>

更新

您需要使用 NSMutableDictionary它是 NSDictionary 的子类因此,查看两者的文档将有助于您的理解。

在这种情况下,您将从一个空的可变字典开始

self.bookmarks = [NSMutableDictionary dictionary];

然后,当用户添加书签时,您可以使用名称作为并将目标作为将其添加到字典中

[self.bookmarks setObject:@"http://google.com" forKey:@"Google"];

关于ios - 自动命名 NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9560450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com