将字符串列表放入NSUserDefaults对象中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将字符串列表放入NSUserDefaults对象中相关的知识,希望对你有一定的参考价值。

我有两个ios应用程序,第一个包含app,第二个是今天的widget应用程序。

在app app中的appdelegate类中,我有符号列表,我想用NSUserDefaults对象传递,因为我需要在今天的widget应用程序中获取此对象。

我的问题是我无法将字符串列表存储到NsUserDefaults对象中。

Object有几种方法:SetBool,SetDouble,SetInt,SetString但是没有方法可以占用一些对象。

只有一种方法是将NSObject用于值,将NSString用于键。

这是我的代码

  var userSharedContent = NSUserDefaults.StandardUserDefaults;
            var symbols = await DatabaseManager.Instance.GetRecentCoinsAsync(5); // returns list of tuples
            var listOfStrings = symbols.Select(o => o.symbol).ToList(); // take strings for tuples and conver it to List()

            userSharedContent.SetValueForUndefinedKey()

如何解决此问题并将列表转换为NSobject以传递它。

什么是解决方案?我已经在这个任务中累积了三天。我想将数据从一个应用程序传递到另一个应用程序。

请帮我解决这个问题。

谢谢。

答案

NSUserDefaults使用“原生”类型,所以你必须在C#ObjC类型之间进行一些转换:

Write an NSArray of NSString from List<string>:

var listOfStrings = new List<string> { "One", "Two", "Three" };

using (var userDefaults = NSUserDefaults.StandardUserDefaults)
using (var nsArray = NSArray.FromStrings(listOfStrings.ToArray()))
{
    userDefaults.SetValueForKey(nsArray, new NSString("MyAppsValues"));
    userDefaults.Synchronize();
}

Read a List<string> from an NSArray of NSString:

List<string> listOfStrings = new List<string>();

using (var userDefaults = NSUserDefaults.StandardUserDefaults)
using (var nsArray = userDefaults.ValueForKey(new NSString("MyAppsValues")) as NSArray)
{
    for (uint i = 0; i < nsArray.Count; i++)
    {
        var cSharpStr = nsArray.GetItem<NSString>(i).ToString();
        listOfStrings.Add(cSharpStr);
    }
}

以上是关于将字符串列表放入NSUserDefaults对象中的主要内容,如果未能解决你的问题,请参考以下文章

NSUserDefaults 自定义对象 - 属性列表对格式无效:200(属性列表不能包含“CFType”类型的对象)

如何快速将 NSIndexPath 添加到 NSUserDefaults

将 QtCreator 中的 Qt 对象放入 Python 列表中

如何将 MPMediaItemCollection 保存到 NSUSerDefaults?

将带有按钮的 UIScrollview 保存到 NSuserdefaults

Swift:将一个对象数组和另一个对象数组保存到 NSUserDefaults 中