我一直在玩这个几个小时而且我被卡住了。我正在尝试使用Monotouch在NSUserDefaults中保存Favorite对象列表。我相信我在正确的轨道上,但我不能完全理解......这是我的模型对象:
public class Favorite {
public Favorite (){}
public string Description {get;set;}
public Song Song {get;set;}
}
public class Song {
public Song (){}
public string Name {get;set;}
public string Artist {get;set;}
}
接下来,我想保存用户选择的收藏夹列表。根据我的阅读,我可以使用NSArray来保存NSUserDefaults中的项目列表。那么如何从收藏夹列表转到收藏夹的NSArray ...我无法找到任何关于此的文档。这是我的设置包装器:
public class Settings {
private static string _favoritesKey = "favorites";
public static IList<Favorite> Favorites {get;set;}
public static void Add(Favorite favorite){
Favorites.Add(favorite);
}
public static void Remove(Favorite favorite){
Favorites.Remove(favorite);
}
public static void Read()
{
var tempFavorites = (NSArray)NSUserDefaults.StandardUserDefaults[_favoritesKey];
if(tempFavorites == null){
Favorites = new List<Favorite>();
}
else {
for(uint i=0;i<tempFavorites.Count;i++){
var fav = tempFavorites.ValueAt(i); //returns IntPtr
// do something to convert to Favorite
// Favorites.Add(converted_favorite);
}
}
}
public static void Write()
{
var tempArray = Favorites.ToArray();
// convert to NSObject[]
NSUserDefaults.StandardUserDefaults[_favoritesKey] = NSArray.FromNSObjects(converted_array);
NSUserDefaults.StandardUserDefaults.Synchronize();
}
}
我是否在正确的轨道上?看起来我需要做的就是弄清楚如何与NSObjects进行转换。另外,如果我在NSUserDefaults中保存这些自定义对象,它们是否需要可序列化?非常感谢!
答案 0 :(得分:3)
如果你想这样做,你需要你的Favorite类是一个NSObject,它具有与[Connect]属性同步的本机存储,如下所示:
[Register]
public class Favorite : NSObject {
[Connect]
public string Description {
get {
return (string) this.GetNativeField ("Description");
}
set {
this.SetNativeField ("Description", new NSString (value));
}
}
}
你会为你的Song课程做同样的事情。您只能在NSStandardUserDefaults对象库中存储本机类。
另一种选择是Jason建议的,只是序列化为一个字符串,然后将其存储为NSString。
答案 1 :(得分:2)
我会尝试序列化它们然后转换为NSString。
答案 2 :(得分:0)
编辑,找到了解决方法:
var Chosenkey = new object[] { NSUserDefaults.StandardUserDefaults.StringForKey("FooIdentifier").ToString() };
var DefValueToSet = new object[] { "Foo" };
var newInfo = NSDictionary.FromObjectsAndKeys(Chosenkey,DefValueToSet);
然后我们将这个NSDictionary注册到用户默认值,我们就完成了。
我正在尝试序列化,然后将结果转换为NSstring,但在尝试创建字典时,我仍然得到了一个nullexception:
这是我的声明:
string llalalala = "Thisisatest";
NSString test = SerializeToString(llalalala);
NSDictionary dictionary = new NSDictionary(test, test,null);
这是我的序列化方法:
//Method to serialize objects
public NSString SerializeToString(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
try
{
return (NSString)writer.ToString();
}
catch (Exception ex)
{
return new NSString("");
}
}
}
我做错了什么? NSstrings不是空的,所以我不知道这里会发生什么......