C# 在不同应用程序之间共享iOS上的文件
我想为iOS上的不同应用程序创建一个可重用类库,我们称它们为:C# 在不同应用程序之间共享iOS上的文件,c#,ios,xamarin.ios,uipasteboard,C#,Ios,Xamarin.ios,Uipasteboard,我想为iOS上的不同应用程序创建一个可重用类库,我们称它们为: com.developer1.appname(App1) com.developer2.appname(App2) 我的第一个目标是让他们共享一些数据。 App1创建一些数据并保存信息。 App2加载数据并将其用于进一步处理 我已经读过一些东西,发现可以将我的对象数据写入图像或联系人中 现在,我正面临着通用粘贴板的到来。 但是,大约一小时后,在粘贴板中再也找不到我的对象(尽管它应该是持久的) 用于存储到粘贴板中的代码: part
- com.developer1.appname(App1)
- com.developer2.appname(App2)
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";
}
有人能告诉我在这种情况下删除对象的原因吗,或者在来自不同开发人员的两个应用程序之间共享对象(通常是ByteArray)的好方法是什么。
提前感谢。Pasteboard由用户控制,而不是应用程序。如果用户选择复制和粘贴,这很好,但应用程序不应在没有用户交互的情况下执行此操作感谢您的回复,您建议采用什么方法在不同的应用程序(来自不同的开发人员/团队)之间正确共享文件。CustomURLscheme可能会工作,但App2会请求数据,App1会到达前台。之后,App1必须为App2调用一个URL,以使App2返回前台。
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}";
}
}