我的问题如下:
我在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
以避免错误?
提前致谢!
答案 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)
你可以使用正向方法调用或实现一个