iPhone dev、NSDictionary如何保留完整的Dict?
<p><p>在嵌套的 NSDictionary 中保留数据时遇到问题。还是 NSMutableDictionary 的某些东西可以使这项工作?看一下,我会尽量解释清楚。</p>
<p>我的 .h 文件如下所示:</p>
<pre><code>@interface MyViewController : UIViewController
<UITableViewDataSource, UITableViewDelegate>
{
NSDictionary *fullData;
IBOutlet UITableView *tableView;
}
@property (nonatomic, retain) NSDictionary *fullData;
@property (nonatomic, retain) UITableView *tableView;
@end
</code></pre>
<p>我在 viewDidLoad 中设置了我的 inits</p>
<pre><code>- (void)viewDidLoad {
...
fullData = ;
;
;
}
</code></pre>
<p>当我尝试将它插入 UITableViewCells 以及我需要做的任何事情时,这工作正常,即使我在此处执行打印 fullData 的 NSLog,也会显示所有数据。
像这样:</p>
<pre><code>2010-11-24 14:49:53.334 MyApp {
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;
}
</code></pre>
<p>虽然这很有效,但我想将 fullData 保留在我的其他事件中,例如 didSelectRowAtIndexPath。首先,我必须保留 ,如果我这样做了,只会保留第一级数据。 dict 项只会指向一些不存在的内存。</p>
<p>所以我试试:</p>
<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Data: %@", fullData);
}
</code></pre>
<p>这有时会返回:</p>
<pre><code>2010-11-24 14:44:28.288 MyApp Data: {
items = (
"<_NSIndexPathUniqueTreeNode: 0x9d2a820>",
"<CALayer: 0x9d27980>",
"<CALayer: 0x9d2bc30>",
"<CALayer: 0x9d29830>",
"<CALayer: 0x9d299e0>"
);
results = 5;
}
</code></pre>
<p>似乎保留了一些值,但无法访问项目内的数据。将数据存储到本地文件然后再次访问它对我来说更好,还是应该可以保留完整的字典?</p>
<p>我尝试添加 <code>[ retain];</code></p>
<p>我对此很陌生,因此我需要帮助以使我的代码也遵循最佳实践。我尝试了很多解决方案,也看过苹果和其他地方的几部电影。我就是无法解决。这可能很简单,但我不知道在哪里看。</p>
<p>谢谢。</p>
<hr/>
<p>对不起,我自己解决了这个问题
我没有包含这个函数:</p>
<pre><code>- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Retain count: %i", );
UITableViewCell *cell =
;
// create a cell
if( cell == nil )
{
cell = [
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:@"cell"];
}
// fill it with content
NSArray *current = [ objectAtIndex:indexPath.row];
NSString *rowLabel = , ];
cell.textLabel.text = rowLabel;
;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
// return it
return cell;
}
</code></pre>
<p>问题是我释放表中每一行的当前变量。这应该是因为变量 current 中的实例不是副本,而是真正的引用。</p>
<p>还是谢谢。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><pre><code>fullData = ;
</code></pre>
<p>自动释放。你不应该<code>保留</code>它。使用这个:</p>
<pre><code>self.fullData = [ initWithContentsOfURL:url];
</code></pre>
<p>而且我认为您现在不需要出于您的目的<code>保留</code>它。只有在 <em></em> <code>MyViewController</code> 发布后才需要访问它。</p>
<p>你要发布 <code>UITableView</code> 吗?它可能会通过并释放您的 <code>NSDictionary 中的单元格。</code> 没有更多代码,我不知道。</p></p>
<p style="font-size: 20px;">关于iPhone dev、NSDictionary如何保留完整的Dict?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/4267653/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/4267653/
</a>
</p>
页:
[1]