2017-09-06 3 views
0

Je souhaite enregistrer un fichier image dans un conteneur de groupe à utiliser avec l'extension iMessage comme autocollant généré par Unity. J'ai donc créé un plugin ios pour obtenir les conteneurs. chemin et enregistrer les données sur le chemin en conséquence, j'obtenir avec succès le chemin qui étaitImpossible d'enregistrer le fichier dans le conteneur partagé de AppGroup avec unity ios

/private/var/mobile/Containers/Shared/AppGroup/1C848C27-6215-4C6F-98A9-E42E7794826D 

mais ne peut pas l'enregistrer en raison de l'exception suivante:

IsolatedStorageException: Could not find a part of the path "/private/var/mobile/Containers/Shared/AppGroup/1C848C27-6215-4C6F-98A9-E42E7794826D/Documents/0.jpg". 
    at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in <filename unknown>:0 
    at System.IO.File.Create (System.String path, Int32 bufferSize) [0x00000] in <filename unknown>:0 
    at TestSharedContainer.saveImageToFolder() [0x00000] in <filename unknown>:0 
    at TestSharedContainer.OnGUI() [0x00000] in <filename unknown>:0 

j'enregistrer le fichier en utilisant suivant code en c#

string fs_share_path = containerPath + "/0.jpg"; 
Debug.Log("writing :" + fs_share_path); 
FileStream fs_share = File.Create(fs_share_path); 
fs_share.Write(text.EncodeToJPG(), 0, text.EncodeToJPG().Length); 
fs.Close(); 

Comment faire pour que cela fonctionne?

Répondre

1

Je n'ai jamais vu quelqu'un qui a obtenu ce travail en obtenant le chemin et en essayant d'écrire à partir de C#. Aussi, j'ai essayé mais échoué aussi. Je suppose que vous ne pouvez pas le faire à partir de C#.

La seule façon que j'ai trouvée pour travailler pour cela est de déplacer la fonction d'écriture vers le plugin. Utilisez Object-C pour écrire une fonction qui écrit dans ce répertoire. Cette fonction Object-C doit prendre deux paramètres: les données (byte[]) et le nom du fichier (string). Vous pouvez ensuite appeler cette fonction à partir de C# et transmettre les données à enregistrer et le nom du fichier à l'extension Object-C.

+0

merci pour le conseil, je vais essayer, la seule préoccupation que j'ai est s'il y aura plus de fosses que je dois lutter avec si passer une masse de données à la fonction plugin natif. – armnotstrong

+0

Je sais. C'est agaçant mais vous vous y habituerez. J'utilise C/C++ pour le faire, puis j'appelle la fonction Object-C de la fonction C++. C'est extrêmement facile, alors essayez de le faire directement à partir de Object-C. N'oubliez pas d'épingler le tableau en C# avant de l'envoyer en C/C++. Voir [ici] (https://stackoverflow.com/a/44424465/3785314) par exemple sur l'envoi de tableau en C/C++ à partir de C#. – Programmer

+0

Merci pour le ref, et je pense maintenant à faire une fonction native qui déplace le fichier du conteneur qu'il possède au conteneur partagé pourrait être un moyen facile pour moi de manipuler, je suis un poisson sur ce plugin et dans mon projet que je dois enregistrer dans le conteneur possédé de toute façon: D – armnotstrong

0

Je remarque que le Application.persistentDataPath de Unity renvoie un chemin commençant par /var/mobile/Containers/Data/Application/ sur iOS.

J'ai essayé de trunking le chemin du conteneur des AppGroups en le faisant commencer par /var/mobile/Containers/Shared/AppGroup/ et il fait en sorte que l'écriture/lecture de fichier fonctionne du côté C#/Unity.