Xamarin.ios 解析Facebook好友列表

Xamarin.ios 解析Facebook好友列表,xamarin.ios,xamarin,Xamarin.ios,Xamarin,在统一api之前,我一直使用以下代码解析Facebook的好友列表: var list = new List<FacebookFriend>(); var graphObject = result as FBGraphObject; using (var array = (NSMutableArray)graphObject[new NSString("data")]) { for (uint i = 0; i < array.Count; i++) {

在统一api之前,我一直使用以下代码解析Facebook的好友列表:

var list = new List<FacebookFriend>();
var graphObject = result as FBGraphObject;

using (var array = (NSMutableArray)graphObject[new NSString("data")])
{
    for (uint i = 0; i < array.Count; i++)
    {
        using (var friend = new NSDictionary(array.ValueAt (i)))
        {
            friends.Add (new FacebookFriend
            {
                ID = friend.ObjectForKey (new NSString ("uid")).ToString (),
                Name = friend.ObjectForKey (new NSString ("name")).ToString (),
            });
        }
    }
}
数组如下所示:

数组{id=10000910208340;name=Patricia Amijajbjhcdj Wongsky;},{id=100009036398265;name=Patricia Amijcfcihbfe Vijayvergiyasen;},{id=10000908691584;name=Elizabeth Amijhfiaehd Bharambesky;}

但是现在NSDictionary的保护级别发生了变化,这段代码中断了。 我尝试过使用一些工厂方法,但没有成功

有人知道在这种情况下应该使用什么而不是

new NSDictionary(array.ValueAt (i)))
谢谢,应该是这样的:

Runtime.GetNSObject array.ValueAt i

旁注:在循环中创建相同的NSString常量是没有效率的。你应该这样做:

using (var uid = new NSString ("uid"))
using (var name = new NSString ("name")) {
    for (uint i = 0; i < array.Count; i++) {
       using (var friend = Runtime.GetNSObject<NSDictionary> (array.ValueAt (i))) {
        friends.Add (new FacebookFriend
        {
            ID = friend.ObjectForKey (uid).ToString (),
            Name = friend.ObjectForKey (name).ToString (),
        });
    }
}

我已经编译了答案并添加了一个get,这可能会对某些人有所帮助,因为我花了几天的时间才弄明白如何在Xamarin IOS中的统一API和Facebook SDK V2.2上实现这个请求

List<string> mUserFriendsList = new List<string>();
    if(FBSession.ActiveSession.IsOpen)
                    {
                        var dic = new NSDictionary();
                        FBRequestConnection.StartWithGraphPath("me/friends?fields=id",dic,"GET",(connection,result,error) =>
                        {
                            if(error != null){
                                Console.WriteLine(error.Description);
                                InvokeOnMainThread (() => new UIAlertView ("Error!", "An error has occured while trying to connect to facebook. Please try again later.", null, "Ok", null).Show ());
                            }else{
                                var graphObject = result as FBGraphObject;
                                using (var array = (NSMutableArray)graphObject[new NSString("data")])
                                {
                                     using(var id = new NSString("id"));
                                     for (uint i = 0; i < array.Count; i++) 
                                     {
                                        using (var friend = Runtime.GetNSObject<NSDictionary> (array.ValueAt (i))) 
                                        {
                                            mUserFriend = friend["id"].ToString ();
                                            mUserFriendsList.Add (mUserFriend);
                                        }
                                    }
                                }
                            }
                        });
                    }
List<string> mUserFriendsList = new List<string>();
    if(FBSession.ActiveSession.IsOpen)
                    {
                        var dic = new NSDictionary();
                        FBRequestConnection.StartWithGraphPath("me/friends?fields=id",dic,"GET",(connection,result,error) =>
                        {
                            if(error != null){
                                Console.WriteLine(error.Description);
                                InvokeOnMainThread (() => new UIAlertView ("Error!", "An error has occured while trying to connect to facebook. Please try again later.", null, "Ok", null).Show ());
                            }else{
                                var graphObject = result as FBGraphObject;
                                using (var array = (NSMutableArray)graphObject[new NSString("data")])
                                {
                                     using(var id = new NSString("id"));
                                     for (uint i = 0; i < array.Count; i++) 
                                     {
                                        using (var friend = Runtime.GetNSObject<NSDictionary> (array.ValueAt (i))) 
                                        {
                                            mUserFriend = friend["id"].ToString ();
                                            mUserFriendsList.Add (mUserFriend);
                                        }
                                    }
                                }
                            }
                        });
                    }