将NSFutableArray中的PFObject添加到新的NSMutableDictionary中

时间:2015-03-28 13:35:39

标签: ios objective-c uitableview for-loop parse-platform

我的问题如下:

我在NSMutableArray中运行一个for循环,该循环最初是从NSMutableDicitonary创建的,并将其添加到另一个NSMutableDictionary。

我如何初始化我的数组和词典:

activitesPerMonth = [[NSMutableDictionary alloc] init];
activitesSeperatedDate = [[NSMutableDictionary alloc] init];

self.activityObjects = [NSMutableArray array];
self.gatherAndHoldObjects = [NSMutableArray array];

我做什么:

NSString *stringDayOnly = [dayOnly stringFromDate:selectedDate];
NSLog(@"%d, %d, %d aaand stringdayonly %@", day, month, year, stringDayOnly);

for (PFObject *activity in self.gatherAndHoldObjects){
    activitesSeperatedDate[activity[@"day"]] = activity;
}

NSMutableArray *storeFromDiction = activitesSeperatedDate[stringDayOnly];

self.activityObjects = [NSMutableArray arrayWithArray:storeFromDiction];
//self.activityObjects = [NSMutableArray arrayWithArray:self.gatherAndHoldObjects];
[self.ActivitytableView reloadData];

self.gatherAndHoldObjects填充如下:

PFQuery *activitesForMonth = [PFQuery queryWithClassName:@"calendarActivities"];
    [activitesForMonth whereKey:@"month" equalTo:self.displayedMonth];
    [activitesForMonth findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (!error) {
            activitesPerMonth[self.displayedMonth] = objects;
            self.gatherAndHoldObjects = activitesPerMonth[self.displayedMonth];
        }
    }];

当我尝试使用self.ActivitytableView填充self.gatherAndHoldObjects时,它运行正常! 但是使用self.Activitytableview填充storeFromDiction我收到此错误:

  

- [PFObject count]:无法识别的选择器发送到实例0x14edd940

     

***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [PFObject count]:发送到实例的无法识别的选择器

我应该如何正确填充self.ActivityTableview storeFromDiction以避免错误?

提前致谢!

2 个答案:

答案 0 :(得分:1)

这一行:

activitesSeperatedDate[activity[@"day"]] = activity;

PFObject词典

中的条目指定activitesSeperatedDate

和这一行

NSMutableArray *storeFromDiction = activitesSeperatedDate[stringDayOnly];

检索其中一个条目并将其分配给NSMutableArray实例。 Objective-C允许你这样做,即使它没有意义 - 它不会检查分配给变量的对象是否是正确的类型。所以你现在有一个NSMutableArray变量,实际上包含PFObject。因此,当您尝试将其视为数组(通过向其发送-count时,您会收到无法识别的选择器错误。

使用字典存储Parse对象时,日期为关键意味着每个日期只有一个PFObject字典 - 每个字典只能存储一个项目。因此要么使用不同形式的存储,要么在字典数组中创建条目,因此您要将日期映射到PFObject的数组 - 例如。

for (PFObject *activity in self.gatherAndHoldObjects)
{
    NSString *dayKey = activity[@"day"];
    NSMutableArray *objectsForDate = self.activitiesSeparatedByDate[dayKey];
    if(objectsForDate == nil) //instantiate array if it doesn't exist
    {
         objectsForDate = [[NSMutableArray alloc]init];
         self.activitiesSeparatedByDate[dayKey] = objectsForDate;
    }

    [objectsForDate addObject:activity]
}

答案 1 :(得分:0)

你可以使用正向方法调用或实现一个