2016-06-15 4 views
2

Мне нужна ваша помощь, поэтому вчера я хочу портировать свою игру в iOS, это не мой первый портирование, предыдущая версия всегда порт успешно, но не сейчасUnauthorizedAccessException: доступ к пути [iOS/Unity3D]

Я использую Unity 5.3.4 и 5.3.5 с Xcode 7.3 на El Capitan, его успешно компилируют из 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] в: 0 в System.IO.StreamWriter..ctor (System.String путь, Boolean добавление) [0x00000] в: 0 в System.IO.File.CreateText (System.String пути) [0x00000] в: 0

его я предполагаю, потому что, когда запуск, игра получит доступ к текстуре/спрайту с защищенного веб-сайта с использованием WWW-метода, с HTTP, а не HTTPS, и попробуйте загрузить и сохранить его как спрайт на Application.PersistentDataPath, а затем применить его в игре

его работа отлично работает на Android, но сом ehow IOS не позволит считывать/записывать файл, Хенч ошибка

Херес фрагмент кода я использую:

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); 
      } 
     } 

    } 
} 

есть обходной путь или исправить для этого?

спасибо заранее

+1

попробуйте использовать 'Path.Combine (Application.persistentDataPath, texturename)', чтобы убедиться, что вы генерируете правильный путь с помощью правильных разделителей. –

+0

@UriPopov Я использую path.combine, в то время как он не дает ошибку о самом единстве, но он не может загрузить что-либо, он не может даже проверить мою папку. –

+0

np: Я тестирую его на ПК и androi, оба дают ту же ошибку, которая не может получить текстура, так как не загружается, потому что папка не может создать даже причину path.combine –

ответ

1

хорошо ...

сегодня у меня есть шанс проверить исправление, которое я придумал, благодаря Needleski.

и да, это работает, по какой-то причине, IOS Dont позвольте мне сохранить файл (в данном случае любой файл) в Application.persistentDataPath непосредственно, вместо этого, что я делаю, я создать папку, а затем создать/сохранить файл внутри папки, и он корректно работает

2

Глядя на исключение и сравнивая его код, я не думаю, что код вашего Предоставленная, где происходит ошибка ... по 2 причинам:

  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() в своем коде.

Я предполагаю, что вы создаете текстовый файл «где-нибудь еще», и вы используете Application.dataPath там вместо Application.persistentDataPath.

+0

благодарю вас за ответ, код просто всего лишь фрагмент того, что происходит, но, как правило, это то, как я получаю спрайт с моего сайта, но да, что меня смущает, нет никаких реальных указаний, которые вызывают исключение, Что касается создания текста, спасибо за указание, что я снова проверю его. –

+0

Я просто проверяю его снова, поэтому @Needleski, я использую постоянный путь данных, и это единственный код, который я использую для создания/записи текстового файла: http://pastebin.com/EDTXUrVd, есть ли другая причина, по которой вы можете видеть вызывают исключение, я честно путаю:/ –

+0

aaaahhhh, я думаю, что вижу проблему, я пишу файл непосредственно в persistentdatapath, я попытаюсь изменить его и сохранить его в папку, создав папку сначала, ее работу над sprite, он должен работать с текстовым файлом, будет обновляться вскоре-ish –

Смежные вопросы