菜鸟教程小白 发表于 2022-12-13 02:16:08

ios - 将 NSDictionary 传递给函数以添加对象/键,但在 main() 中显示为空


                                            <p><p>我是 Objective C 的新手,在添加到 NSMutableDictionary 时遇到问题。我有一个包含以下方法的 Thing 类。 </p>

<pre><code>-(BOOL) addThing:(Thing*)myThing withKey:(NSString*)key inDictionary:(NSMutableDictionary*) myDictionary
{
    if(!myDictionary) { //lazy initialization
       myDictionary = ;
       ;
       return YES;
    }
    else {
       if(!) {
         ;
         return YES;
       }
       else {
         NSLog(@&#34;The username %@ already exists!&#34;, _monster);
         return NO;
    }
}
</code></pre>

<p>}</p>

<p>但是当我在 main() 中调用它时,字典仍然显示为空。</p>

<pre><code>int main(int argc, const char * argv[]) {
@autoreleasepool {
    NSMutableDictionary *myDictionary;

    Thing *foo = ;
    ;

    if( &gt; 0) {
      NSLog(@&#34;I&#39;m not empty!&#34;);
    }
    else {
      NSLog(@&#34;Dictionary is empty&#34;);
    }

    //Prints out &#34;Dictionary is empty&#34;

}
return 0;
</code></pre>

<p>}</p>

<p>如果我直接在 addThing 方法中进行计数检查,它将打印“我不是空的!”。我不确定我做错了什么。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的问题是您只是在 <code>addThing:withKey:inDictionary</code> 中初始化局部变量 <code>myDictionary</code>。
为了能够影响您作为参数传递的 NSDictionary,您确实必须将 <code>NSDictionary **</code> 传递给您的函数,并将其视为指针,也就是说,将其用作 <code>*我的字典</code></p>

<p>确实有效的方法是:</p>

<pre><code>- (BOOL) addThing:(id)thing withKey:(NSString *)key inDictionary:(NSMutableDictionary **)myDictionary{
   if(!*myDictionary &amp;&amp; key &amp;&amp; thing){
      *myDictionary = ;
      [*myDictionary setObject:thing forKey:key];
      return YES;
   } else {
   // Removed this code as it doesn&#39;t really matter to your problem
   return NO;
   }
}
</code></pre>

<p>并像这样调用它(注意传递的是 dict 变量的地址,而不仅仅是普通变量):</p>

<pre><code>NSMutableDictionary *dict;

</code></pre>

<p>这确实会将 dict 转换为非零字典,前提是您没有传递将包含对象 <code>foo< 的零 <code>key</code> 或 <code>thing</code>/code> 用于键 <code>@"key"</code>。</p>

<p>我测试了,没有错误。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 将 NSDictionary 传递给函数以添加对象/键,但在 main() 中显示为空,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26086454/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26086454/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 将 NSDictionary 传递给函数以添加对象/键,但在 main() 中显示为空