我有两个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以传递它。
什么是解决方案?我已经在这个任务中累积了三天。我想将数据从一个应用程序传递到另一个应用程序。
请帮我解决这个问题。
感谢。
答案 0 :(得分:1)
NSUserDefaults
适用于“原生”类型,因此您必须在C#
和ObjC
类型之间进行一些转换:
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();
}
List<string>
: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);
}
}