gpt4 book ai didi

iPhone dev,NSDictionary 如何保留完整的 Dict?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:19:37 26 4
gpt4 key购买 nike

我在嵌套的 NSDictionary 中保留数据时遇到问题。还是 NSMutableDictionary 可以使这项工作正常进行?看一看,我会尽量解释清楚。

我的 .h 文件如下所示:

@interface MyViewController : UIViewController 
<UITableViewDataSource, UITableViewDelegate>
{
NSDictionary *fullData;
IBOutlet UITableView *tableView;
}

@property (nonatomic, retain) NSDictionary *fullData;
@property (nonatomic, retain) UITableView *tableView;

@end

我在 viewDidLoad 中设置了 init

- (void)viewDidLoad {
...
fullData = [NSDictionary dictionaryWithContentsOfURL:url];
[fullData retain];
[super viewDidLoad];
}

当我尝试将它插入 UITableViewCells 以及我需要做的任何事情时,这工作正常,即使我在此处执行打印 fullData 的 NSLog,也会显示所有数据。像这样:

2010-11-24 14:49:53.334 MyApp[25543:40b] {
items = (
{
id = 5;
localId = 1;
name = "A name1";
},
{
id = 8;
localId = 3;
name = "A name2";
},
{
id = 9;
localId = 4;
name = "A name3";
},
{
id = 10;
localId = 5;
name = "A name4";
},
{
id = 11;
localId = 6;
name = "A name5";
}
);
results = 5;
}

虽然这非常有效,但我想在我的其他事件中保留完整数据,例如 didSelectRowAtIndexPath。首先,我必须保留 ,而且如果我这样做,只会保留第一级数据。 dict 项只会指向一些不存在的内存。

所以我尝试:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Data: %@", fullData);
}

这有时会返回:

2010-11-24 14:44:28.288 MyApp[25493:40b] Data: {
items = (
"<_NSIndexPathUniqueTreeNode: 0x9d2a820>",
"<CALayer: 0x9d27980>",
"<CALayer: 0x9d2bc30>",
"<CALayer: 0x9d29830>",
"<CALayer: 0x9d299e0>"
);
results = 5;
}

似乎保留了一些值,但是无法访问项目中的数据。是将数据存储到本地文件然后再次访问它更好,还是应该保留完整的字典?

我尝试添加 [[fullData objectForKey:@"items"] retain];

我对此很陌生,所以我需要帮助让我的代码也遵循最佳实践。我尝试过很多解决方案,也看过苹果和其他地方的几部电影。我只是无法解决它。它可能很简单,但我不知道去哪里找。

谢谢。


对不起,我自己解决了这个问题我没有包括这个功能:

- (UITableViewCell *)tableView:(UITableView *)tableView 
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Retain count: %i", [fullData retainCount]);
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:@"cell"];

// create a cell
if( cell == nil )
{
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"cell"];
}

// fill it with content
NSArray *current = [[fullData objectForKey:@"items"] objectAtIndex:indexPath.row];
NSString *rowLabel = [NSString stringWithFormat:@"%@, %@",[current valueForKey:@"localId"], [current valueForKey:@"name"]];
cell.textLabel.text = rowLabel;
[current release];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

// return it
return cell;
}

问题是我释放表中每一行的当前变量。这应该是因为变量 current 中的实例不是副本,而是真正的引用。

还是谢谢你

最佳答案

fullData = [NSDictionary dictionaryWithContentsOfURL:url];

自动发布。你不应该保留它。使用这个:

self.fullData = [[NSDictionary alloc] initWithContentsOfURL:url];

而且我认为您现在不需要保留它用于您的目的。只有在 MyViewController 发布后您需要访问它。

您要发布 UITableView 吗?它可能会通过并释放它在您的 NSDictionary 中的单元格。没有更多代码,我不知道。

关于iPhone dev,NSDictionary 如何保留完整的 Dict?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267653/

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