在iOS上的不同应用之间共享文件

时间:2018-11-21 08:56:47

标签: c# ios xamarin.ios uipasteboard

我想为iOS上的不同应用程序创建可重用的类库,我们称它们为:

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

我的首要目标是让他们共享一些数据。 App1创建一些数据并保存信息。 App2加载数据并将其用于进一步处理。

我已经读过ways to share on ios,发现可以将对象数据写入图像或联系人中。

现在,我正面临通用粘贴板的方法。 但是,经过大约。一个小时后,我在粘贴板上找不到我的对象(尽管它应该是持久的see

用于存储到粘贴板的代码:

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

有人可以告诉我在这种情况下为什么删除对象的原因,或者是在来自不同开发人员的两个应用程序之间共享对象(通常是字节数组)的好方法吗? 预先感谢。

0 个答案:

没有答案