2015-03-28 2 views
-1

Моя проблема заключается в следующем:Добавить PFObject от NSMutableArray к новому NSMutableDictionary

Я бегу за петлю в качестве NSMutableArray, которые первоначально были созданы из 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]: unrecognized selector sent to instance 0x14edd940

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[PFObject count]: unrecognized selector sent to instance

Что я должен сделать, чтобы правильно заселить self.ActivityTableview с storeFromDiction, чтобы не получить ошибку?

Заранее благодарен!

ответ

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] 
} 
+0

Что делать, если я добавить * действия из цикла for в массив, а затем добавить массив в словарь? – Dridia

+1

Да, это должно сработать. Просто убедитесь, что у вас нет кода в другом месте, который предполагает объекты в t он словарь * есть * PFObjects –

+0

только что скорректировал код, который я разместил, не назначал массив словарной записи, также написание в именах переменных –

0

U можно использовать вперед вызов метода или реализуют один