菜鸟教程小白 发表于 2022-12-11 20:25:08

iphone - 将文件从 bundle 复制到文档不起作用(Cocoa 错误 512)


                                            <p><p>我试图简单地将我的 sqlite3 数据库复制到文档目录。我得到一个 <code>Cocoa Error 512</code> 并且我认为它不是一个有效的目录(或类似的东西。</p>

<p>数据库文件位于 XCode 中的 Resources 文件夹中。 (文件名正确)</p>

<p>这是我尝试使用的代码:</p>

<pre><code>-(void) checkAndCreateDatabase
{
    BOOL success;
    NSFileManager *fileManager = ;
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = ;

    //databasePath + databaseName is declared in the header
    databaseName = @&#34;WaypointDatabase.sql&#34;;
    databasePath = ;

    success = ;
if(success)
    {
      NSLog(@&#34;Database exists&#34;);
            return;
    }
    else
      NSLog(@&#34;Database does not exists&#34;);

    NSString *databasePathFromApp = [ pathForResource:@&#34;WaypointDatabase&#34; ofType:@&#34;sql&#34;];
    if(databasePathFromApp == nil)
    {
      NSLog(@&#34;ERROR: IT IS NIL&#34;);
    }
    NSError* error = nil;

    NSLog(@&#34;Path in bundle:\n%@\n\n&#34;, databasePathFromApp);
    NSLog(@&#34;Path to copy to:\n%@\n\n&#34;, databasePath);

    [fileManager copyItemAtPath:databasePathFromApp
                     toPath:databasePath error:&amp;error];
    ;
    if (error)
    {
      NSLog(@&#34;%@\n\n&#34;, error);
      NSLog(@&#34;%@&#34;, );
    }
}
</code></pre>

<p>我得到的控制台输出是:</p>

<blockquote>
<p>2011-10-30 10:36:13.242 xxxx Database does not exists<br/>
2011-10-30 10:36:13.249 xxxx Path in bundle:<br/>
/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/xxxx.app/WaypointDatabase.sql</p>

<p>2011-10-30 10:36:13.252 xxxx Path to copy to:<br/>
/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/Documents/WaypointDatabase.sql</p>

<p>2011-10-30 10:36:13.268 xxxx Error Domain=NSCocoaErrorDomain Code=512 &#34;The operation couldn’t be completed. (Cocoa error 512.)&#34; UserInfo=0xe8b7cd0 {NSUserStringVariant=(
      Copy
), NSFilePath=/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/xxxx.app/WaypointDatabase.sql, NSDestinationFilePath=/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/Documents/WaypointDatabase.sql, NSUnderlyingError=0xe8b7ee0 &#34;The operation couldn’t be completed. Not a directory&#34;}</p>

<p>2011-10-30 10:36:13.272 xxxx {
      NSDestinationFilePath = &#34;/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/Documents/WaypointDatabase.sql&#34;;
      NSFilePath = &#34;/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/xxxx.app/WaypointDatabase.sql&#34;;
      NSUnderlyingError = &#34;Error Domain=NSPOSIXErrorDomain Code=20 \&#34;The operation couldn\U2019t be completed. Not a directory\&#34;&#34;;
      NSUserStringVariant =   (
          Copy
      );
}</p>
</blockquote>

<p>我认为这一定与获取目录路径或其他东西有关,但现在已经卡了几天了。</p>

<p><em>请注意,这可以完美运行,并且在模拟器上没有任何错误。</em></p>

<p>我哪里出错了?</p>

<p><strong>[更新]</strong></p>

<p>这可能是因为 <code>Documents</code> 文件夹目录不存在吗?我将如何创建/检查它?</p>

<p><strong>[更新 2]</strong></p>

<p>我已经使用了一些其他测试</p>

<pre><code>NSFileManager *fileManager = ;
NSError *err = nil;
NSArray *dirArr = ;
NSLog(@&#34;~~Contents:\n%@&#34;,dirArr);
NSLog(@&#34;~~Error: \n%@&#34;,err);
</code></pre>

<p>令人惊讶的是,它给出了 <code>Cocoa Error 256</code> 并且还说“不是目录”。几乎就像 <code>Documents 目录不存在一样。但确实如此,根据</code>NSSearchPathForDirectoriesInDomains`</p>

<p>这是我得到的输出</p>

<blockquote>
<p>2011-10-30 10:59:16.934 xxxx ~~Contents:<br/>
(null)<br/>
2011-10-30 10:59:16.936 xxxx ~~Error:<br/>
Error Domain=NSCocoaErrorDomain Code=256 &#34;The operation couldn’t be completed. (Cocoa error 256.)&#34; UserInfo=0x10052580 {NSUserStringVariant=(
      Folder
), NSFilePath=/var/mobile/Applications/FF654016-4257-47BB-99FE-55DB5453BBC6/Documents, NSUnderlyingError=0x10054a50 &#34;The operation couldn’t be completed. Not a directory&#34;}</p>
</blockquote></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>通过在 die info.plist 中设置非标准的 Bundle ID 解决了问题</p>

<p>我为此特定应用使用了 iTunes Connect 中的 Bundle ID。现在一切正常。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于iphone - 将文件从 bundle 复制到文档不起作用(Cocoa 错误 512),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/7941821/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/7941821/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iphone - 将文件从 bundle 复制到文档不起作用(Cocoa 错误 512)