菜鸟教程小白 发表于 2022-12-12 10:22:52

iphone - iOS 数组未完全填充


                                            <p><p>我正在使用这两种递归方法来查找某个文件夹中文件和目录的路径</p>

<pre><code>- (NSMutableArray *)getFilePathsFromDirectory:(NSString *)directory{
NSMutableArray *contents = [ init];
NSArray *arr = [ contentsOfDirectoryAtPath:directory error:nil];
for (NSString *file in arr) {
    BOOL isDir;
    [ fileExistsAtPath: isDirectory:&amp;isDir];
    if (!isDir) {
      ];
    }
    else{
      ];
      ]];
    }
}
return contents;
}

- (NSString *)getPathForItemNamed:(NSString *)name array:(NSMutableArray *)arr{
NSString *str;
if (name) {
    for (NSString *s in arr) {
      if (]) {
            if ([ isEqualToString:name]) {
                return s;
            }
      }
    }
    for (NSMutableArray *aq in arr) {
      if (]) {
            str = ;
            return str;
      }
    }
}
return str;
}
</code></pre>

<p>但问题是,经过一定数量的子目录(3-5)后,这将停止返回任何路径并返回 <code>(null)</code>。我觉得这与由于某种原因在返回之前没有填充所有目录的数组有关。以下是我如何称呼这些</p>

<pre><code>NSMutableArray *paths = ];

path = .textLabel.text array:paths];
NSLog(@&#34;%@&#34;, path);
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的 <code>getPathForItemNamed:</code> 方法存在两个问题:</p>

<ul>
<li>当它无法通过名称找到文件时,它返回一个未初始化变量 <code>str</code> 的值。这是未定义的行为 - 您需要在初始化时将 <code>str</code> 设置为 <code>nil</code>。事实上,您根本不需要 <code>str</code>(请参阅下面的修复)。</li>
<li>当它发现它的第一个子目录时,它假定它要查找的文件必须在该子目录中,即使它不是。无论 <code>getPathForItemNamed:</code> 的一级递归调用返回什么,都成为顶级调用的返回结果。这很糟糕:如果您要查找的文件位于第二个子目录的子树中,您将永远找不到它!</li>
</ul>

<p>您可以通过以下方式修复您的方法:</p>

<pre><code>- (NSString *)getPathForItemNamed:(NSString *)name array:(NSMutableArray *)arr{
    if (!name) return nil;
    for (NSString *s in arr) {
      if (]) {
            if ([ isEqualToString:name]) {
                return s;
            }
      }
    }
    for (NSMutableArray *aq in arr) {
      if (]) {
            str = ;
            // Return something only when you find something
            if (str) return str;
      }
    }
    return nil; // You do not need str at all.
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - iOS 数组未完全填充,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15938331/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15938331/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - iOS 数组未完全填充