将字节为[]的类添加到iOS共享扩展(Xamarin)中的NSUserDefaults

将字节为[]的类添加到iOS共享扩展(Xamarin)中的NSUserDefaults,ios,xamarin.ios,nsuserdefaults,share-extension,Ios,Xamarin.ios,Nsuserdefaults,Share Extension,在Xamarin.iOS共享扩展中,我想将我选择的文件(如pdf、图像、word等)存储在我的NSUserDefaults中,当主应用程序启动时,我可以访问其中存储的文件 这是我的文件类: public class MyClass { public string FileName { get; set; } public byte[] Content { get; set; } } 因此,在DidSelectPost方法中的LoadItem中,我使用文件的字节[]创建

在Xamarin.iOS共享扩展中,我想将我选择的文件(如pdf、图像、word等)存储在我的NSUserDefaults中,当主应用程序启动时,我可以访问其中存储的文件

这是我的文件类:

public class MyClass {    
    public string FileName { get; set; }
    public byte[] Content { get; set; } 
}
因此,在DidSelectPost方法中的LoadItem中,我使用文件的字节[]创建了ByObject。然后,为了在NSUserDefaults中保存数据,我使用Newtonsoft.JSON库将我的对象转换为JSON,如下所示:

我将其设置为NSUserDefaults对象,如下所示:

NSUser.SetValueForKey(new NSString(myFileObject), new NSString("FileSharing" + count));

之后,我将同步我的项目:NSUser.Synchronize

一切进展顺利,但当主应用程序打开时,新数据不在这里

string toDesralize = nSUser.StringForKey("FileSharing0");
我尝试了很多文件,我发现这个问题只适用于高度较低的文件,对14mb这样的文件不起作用。如何在NSUserDefault中保存高度较高的文件?做同样的工作还有其他方法吗

您可以使用在Xamarin.iOS中存储和读取数据:

    var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    var filename = Path.Combine(documents, "Write.txt");
    //save text
    File.WriteAllText(filename, "Write this text into a file");
    //save bytes
    File.WriteAllBytes(filename,yourBytes);
以及读取方法:

    var text = File.ReadAllText("TestData/ReadMe.txt");
    Console.WriteLine(text);
    var bytes = File.ReadAllBytes("path");
您可以使用在Xamarin.iOS中存储和读取数据:

    var documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    var filename = Path.Combine(documents, "Write.txt");
    //save text
    File.WriteAllText(filename, "Write this text into a file");
    //save bytes
    File.WriteAllBytes(filename,yourBytes);
以及读取方法:

    var text = File.ReadAllText("TestData/ReadMe.txt");
    Console.WriteLine(text);
    var bytes = File.ReadAllBytes("path");

NSUserDefaults用于少量数据,而不是存储整个文件。你想做的是个坏主意。如果您需要存储大文件,只需使用文件系统。这是正确的,感谢您的回答。默认情况下,存储的是少量数据,而不是存储整个文件。你想做的是个坏主意。如果你需要存储大文件,只需使用文件系统。这是正确的,谢谢你的回答谢谢你的回答!您的回答是正确的,我必须使用文件系统根据您的回答,我尝试创建一个文本文件,它可以在两个应用程序中访问:主应用程序和共享扩展。此文件必须放置在应用程序组容器中,否则两者都无法访问。我试过选择15mb的文件,例如=>没有成功!我觉得这对股票延期来说太重了,但我不知道为什么?你知道吗?它崩溃了,没有任何错误。如果文件很大,我想你需要使用SQLite.NET。这是文件:还有。好的!再次感谢你的回答!您的回答是正确的,我必须使用文件系统根据您的回答,我尝试创建一个文本文件,它可以在两个应用程序中访问:主应用程序和共享扩展。此文件必须放置在应用程序组容器中,否则两者都无法访问。我试过选择15mb的文件,例如=>没有成功!我觉得这对股票延期来说太重了,但我不知道为什么?你知道吗?它崩溃了,没有任何错误。如果文件很大,我想你需要使用SQLite.NET。这是文件:还有。好的!再一次谢谢你