Делитесь файлами на iOS между разными приложениями - PullRequest
0 голосов
/ 21 ноября 2018

Я хочу создать повторно используемую библиотеку классов для различных приложений на iOS, назовем их:

  • com.developer1.appname (App1)
  • com.developer2.appname (App2)

Моя первая цель - дать им возможность поделиться некоторыми данными.Приложение 1 создает некоторые данные и сохраняет информацию.App2 загружает данные и использует их для дальнейшей обработки.

Я уже прочитал способы обмена на ios и где-то нашел, что можно было бы записать данные моего объекта в изображения или контакты.

Прямо сейчас я сталкиваюсь с приближением Главного картона.Однако после ок.Один час мой объект больше не может быть найден в картоне (хотя он должен быть постоянным см. )

Код для хранения в картоне:

partial void Testbutton_TouchUpInside(UIButton sender)
    {
        var pasteboard = UIPasteboard.General;

        //Create Data
        // 4 * 1 MB
        IEnumerable<int> idata = Enumerable.Range(0, 1024);
        int[] iarray = idata.ToArray();
        byte[] data = new byte[1+iarray.Length * sizeof(int)];
        Buffer.BlockCopy(iarray, 0, data, 1, data.Length-1);
        data[0] = counter++;

        NSData nsd = NSData.FromArray(data);

        // insert to pasteboard
        //pasteboard.SetData(nsd, "mydata");

        // nach etwa 1h ist es weg
        pasteboard.SetItemProviders(new NSItemProvider[] {new NSItemProvider(nsd, key)},false,NSDate.DistantFuture); 


        testlabel.Text = "Inserted Data to Pasteboard";
    }

код длячтение элемента:

partial void Testbutton2_TouchUpInside(UIButton sender)
    {
        var pasteboard = UIPasteboard.General;
        bool contains = pasteboard.Contains(new[] { key });
        if(contains)
        {
            testlabel2.Text = $"Contains {key}";

            var data = pasteboard.DataForPasteboardType(key);
            var dataBytes = new byte[data.Length];
            System.Runtime.InteropServices.Marshal.Copy(data.Bytes, dataBytes, 0, Convert.ToInt32(data.Length));

            int[] ints = new int[(dataBytes.Length-1)/4];
            Buffer.BlockCopy(dataBytes, 1, ints, 0, dataBytes.Length - 1);
            testlabel.Text = "Loaded " + dataBytes.Length + " bytes";
            //testlabel2.Text += "Data = {"+dataBytes[0]+","+String.Join(", ", ints) +"}";

            StringBuilder sb = new StringBuilder(1024 );
            sb.Append("Data = {" + dataBytes[0]);
            foreach (var i1 in ints)
            {
                sb.Append($", {i1.ToString()}");
            }
            testlabel2.Text = sb.ToString() + "}";
            int i = 123;
        }
        else
        {
            testlabel2.Text = $"Contains NOT {key}";
        }
    }

Может кто-нибудь сказать мне, почему объект удаляется в этом случае, или какой был бы хороший способ поделиться объектами (обычно байтами) между двумя приложениями от разных разработчиков.Заранее спасибо.

...