菜鸟教程小白 发表于 2022-12-13 06:02:14

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


                                            <p><p>在嵌套的 NSDictionary 中保留数据时遇到问题。还是 NSMutableDictionary 的某些东西可以使这项工作?看一下,我会尽量解释清楚。</p>

<p>我的 .h 文件如下所示:</p>

<pre><code>@interface MyViewController : UIViewController
&lt;UITableViewDataSource, UITableViewDelegate&gt;
{
    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 = &#34;A name1&#34;;
      },
                {
            id = 8;
            localId = 3;
            name = &#34;A name2&#34;;
      },
                {
            id = 9;
            localId = 4;
            name = &#34;A name3&#34;;
      },
                {
            id = 10;
            localId = 5;
            name = &#34;A name4&#34;;
      },
                {
            id = 11;
            localId = 6;
            name = &#34;A name5&#34;;
      }
    );
    results = 5;
}
</code></pre>

<p>虽然这很有效,但我想将 fullData 保留在我的其他事件中,例如 didSelectRowAtIndexPath。首先,我必须保留 ,如果我这样做了,只会保留第一级数据。 dict 项只会指向一些不存在的内存。</p>

<p>所以我试试:</p>

<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@&#34;Data: %@&#34;, fullData);
}
</code></pre>

<p>这有时会返回:</p>

<pre><code>2010-11-24 14:44:28.288 MyApp Data: {
    items =   (
      &#34;&lt;_NSIndexPathUniqueTreeNode: 0x9d2a820&gt;&#34;,
      &#34;&lt;CALayer: 0x9d27980&gt;&#34;,
      &#34;&lt;CALayer: 0x9d2bc30&gt;&#34;,
      &#34;&lt;CALayer: 0x9d29830&gt;&#34;,
      &#34;&lt;CALayer: 0x9d299e0&gt;&#34;
    );
    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(@&#34;Retain count: %i&#34;, );
    UITableViewCell *cell =
    ;

    // create a cell
    if( cell == nil )
    {
      cell = [
                initWithStyle:UITableViewCellStyleDefault
                reuseIdentifier:@&#34;cell&#34;];
    }

    // 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]
查看完整版本: iPhone dev、NSDictionary如何保留完整的Dict?