UnauthorizedAccessException:访问路径[iOS / Unity3D]

时间:2016-06-15 09:08:57

标签: c# ios iphone xcode unity3d

我需要你的帮助,所以昨天我想将我的游戏移植到iOS,这不是我第一次移植它,以前的版本总是端口成功,但现在不是

我在El Capitan上使用Unity 5.3.4和5.3.5以及Xcode 7.3,它是从XCode成功编译的,但是我在场景开始时初始化和生成的所有对象都不会出现在游戏,我不知道它有什么问题,因为Unity或XCode本身没有错误

但是从日志中我怀疑是因为这个

  

UnauthorizedAccessException:访问路径" /var/mobile/Containers/Data/Application/280DC265-ABD8-41A3-8B87-74D09910FB24/Documentstemp.gjk"被拒绝。   在System.IO.FileStream..ctor(System.String路径,FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize,布尔匿名,FileOptions选项)[0x00000] in:0   在System.IO.StreamWriter..ctor(System.String path,Boolean append)[0x00000] in:0   在System.IO.File.CreateText(System.String path)[0x00000] in:0

我假设是因为,在启动时,游戏将使用WWW方法从安全网站访问纹理/精灵,使用HTTP而不是HTTPS,并尝试下载并将其保存为Application.PersistentDataPath中的精灵,然后将其应用到游戏中

它在Android上正常工作但不知何故iOS不允许读/写文件,这是错误的

我使用的代码的heres片段:

IEnumerator getBillboard()
{
    WWW getBillboardlistURL = new WWW(billboardlistURL);
    yield return getBillboardlistURL;

    if (getBillboardlistURL.error != null)
    {

    }
    else
    {


        WWW imageLink = new WWW(pictLink[Mathf.FloorToInt(i / 3)]);
        yield return imageLink;
        Texture2D imageTemp = imageLink.texture;
        obj.transform.GetChild(0).GetComponent<SpriteRenderer>().sprite = Sprite.Create(imageTemp, new Rect(0, 0, imageTemp.width, imageTemp.height), new Vector2(0.5f, 0.5f));
        obj.name = namaProduk[Mathf.FloorToInt(i / 3)];

                print("BILLBOARD ONLINE");

        /// ======= WRITE BILLBOARD NAME TO FILE AND SAVE IT =======



        /// ======================= END ============================


        var bytes = imageLink.texture.EncodeToPNG();

        //print(Application.dataPath);

        //cek file
        if(redownloadImage)
                {
                    File.WriteAllBytes(Application.persistentDataPath + "/vendorBillboard/" + namaProduk[Mathf.FloorToInt(i / 3)] + ".png", bytes);
                    print("REDOWNLOAD SEMUA TEXTURE!");
                }

                obj.SetActive(false);
                billboardPool.Add(obj);
            }
        }

    }
}

是否有解决方法或修复此问题?

提前谢谢

2 个答案:

答案 0 :(得分:3)

查看异常并将其与您的代码进行比较,我认为您提供的代码不是发生错误的地方......原因有两个:

  1. 异常说“UnauthorizedAccessException:访问路径”/var/mobile/Containers/Data/Application/280DC265-ABD8-41A3-8B87-74D09910FB24/Documentstemp.gjk“被拒绝”。但是,在您的代码中,您的路径中包含/vendorBillboard/。注意/vendorBillboard/不在异常的路径中。

  2. 在异常结束时,它指出问题出在System.IO.File.CreateText (System.String path),但是,您在代码中使用了System.IO.File.WriteAllBytes()

  3. 我猜你正在“在其他地方”创建一个文本文件而你正在使用Application.dataPath而不是Application.persistentDataPath

答案 1 :(得分:0)

...好吗

今天我有机会测试一下我提出的解决方案,感谢Needleski。

是的,由于某种原因,iOS不允许我直接将文件(在本例中为任何文件)保存到Application.persistentDataPath, 相反,我做的是,我创建一个文件夹,然后在文件夹中创建/保存文件,它现在正常工作