System.InvalidCastException выдало не удалось привести объект типа NSnull - PullRequest
0 голосов
/ 09 апреля 2020

Я получаю исключение с сообщением "Невозможно привести объект типа 'Foundation.NSNull' к типу 'Foundation.NSDictionary'", когда я пытаюсь go просмотреть все данные в строке var thisListAllData = snapshot.GetValue<NSDictionary>();

В моей базе данных есть два разных узла. А именно, maindata и data, и они выглядят так:

Data base image of Node Data base image of Node

Что я пытаюсь сделать, это взять данные из maindata, а затем проверьте данные, указанные внутри, во всех данных, а затем извлеките их, чтобы меня могли видеть и другие пользователи.

public static async Task Fetch()
{
    AppDataClass.ShareLst = new List<Post>();

    if (AppDataClass.auth.CurrentUser == null)
        return;

    bool done = false;

    foreach (SharedData anyCoord in AppDataClass.ShareD)
    {
        string PName = anyCoord.PostName;
        string ownerUid = anyCoord.PostOwner.UId;

        AppDataClass.MaindataNode
                .GetChild("SharedPosts")
                .GetChild(ownerUid)
                .GetChild(PName)
                .ObserveSingleEvent(DataEventType.Value, (snapshot) =>
                {
                    var thisListAllData = snapshot.GetValue<NSDictionary>();

                    List<FeedList> itemsInList = new List<FeedList>();

                    if (thisListAllData.ValueForKey((NSString)"Post") != null)
                    {
                        if ((thisListAllData.ValueForKey((NSString)"Post")).IsKindOfClass(new ObjCRuntime.Class(typeof(NSDictionary))))
                        {
                            NSDictionary itemsOfListVals = (NSDictionary)NSObject.FromObject(thisListAllData.ValueForKey((NSString)"Post"));

                            for (int i = 0; i < (int)itemsOfListVals.Values.Length; i++)
                            {
                                NSDictionary eachItemVals = (NSDictionary)NSObject.FromObject(itemsOfListVals.Values[i]);
                                var fetchedItemName = (NSString)eachItemVals.ValueForKey((NSString)"feedSport");
                                var fetchedItemTime = (NSString)eachItemVals.ValueForKey((NSString)"locTime");

                                itemsInList.Add(new FeedList
                                {
                                    SportName = fetchedItemName,
                                    LocTime = DateTime.Parse(fetchedItemTime)
                                });
                            }
                        }
                    }

                    Post thisList = new Post
                    {
                        PostName = PName,
                        PostOwner = anyCoord.PostOwner,
                        ListItems = itemsInList
                    };

                    AppDataClass.ShareLst.Add(thisList);

                    done = true;
                });
    }

    while (!done)
    {
        await Task.Delay(50);
    }
}
...