2015-03-14 3 views
-1

В моем отладчике это как мой журнал оператор печатает мои сообщения объекта:Как перестроить объект NSDictionaries

self.messages = (
"<lean: 0x7fcf98665140, objectId: vglE1UJ5KI, localId: (null)> {\n messageBody = Jj;\n recipientId = XvvxETqjph;\n senderId = XvvxETqjph;\n timestamp = \"1424991590106.210938\";\n}", 
"<lean: 0x7fcf98667940, objectId: rgBFYBMKlU, localId: (null)> {\n messageBody = \"test 3 from ian\";\n recipientId = XvvxETqjph;\n senderId = Hoy7UjLzOh;\n timestamp = \"1424631667110.638184\";\n}", 
"<lean: 0x7fcf98667f30, objectId: hB5uhwsYsu, localId: (null)> {\n messageBody = \"test 2 from user1\";\n recipientId = XvvxETqjph;\n senderId = VQzxWbDnal;\n timestamp = \"1424630904935.162109\";\n}", 
"<lean: 0x7fcf986685b0, objectId: dOe2B9oq5b, localId: (null)> {\n messageBody = \"test 1\";\n recipientId = XvvxETqjph;\n senderId = XvvxETqjph;\n timestamp = \"1424630808309.478027\";\n}" 
) 
  1. что именно это? Он выглядит как объект словарей, но переменные objectId и localId находятся за пределами фигурных скобок, поэтому я не уверен.

  2. Как мне реструктурировать это, чтобы я мог иметь каждый отдельный словарь сам по себе?

Im получать эти данные из моего внутреннего интерфейса на parse.com:

-(void)viewWillAppear:(BOOL)animated{ 

NSString *userId = [[PFUser currentUser] objectId]; 

PFQuery *query = [PFQuery queryWithClassName:@"lean"]; 
[query whereKey:@"recipientId" equalTo:userId]; 
[query orderByDescending:@"createdAt"]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (error) { 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
    } 
    else { 
     // We found messages! 
     masterMessages = (NSDictionary *)objects; 

     NSLog(@"self.messages = %@", masterMessages); 



     [self.tableView reloadData]; 

    } 
}]; 


} 

enter image description here

+0

Пожалуйста, покажите код, генерирующий этот оператор журнала, а также код, который генерирует эти словари. – SevenBits

+0

Что это за объект 'lean'? Похоже, что кто-то может переписать «описание» вашего объекта. – Larme

+0

У вас есть массив объектов Parse. Глупо, объекты Parse печатаются так. –

ответ

2

это простой NSArray, который содержит объекты типа с именем lean. вы можете получить нужный объект по его индексу

UPDATE:

Я не могу быть уверен, конечно. Я понятия не имею о структуре lean. Но, скорее всего, он содержит поле (и я предполагаю, что это должно быть свойство) с именем messageBody. Если это так, то вы можете сделать следующее:

NSMutableArray* messagesBySenderName = [NSMutableArray new]; 

for (id lean in objects) 
{ 
    NSDictionary *messageBody = [lean valueForKeyPath:@"messageBody"]; 

    if ([lean[@"senderId"] isEqualToString:@"Hoy7UjLzOh"]) 
    { 
    [messagesBySenderName addObject:messageBody]; 
    } 
} 

Опять же - это только предположение. Ни в коем случае я не могу гарантировать, что он будет работать

+0

Что делать, если я хочу вытащить сообщение для объектов, которые отправленыName = Hoy7UjLzOh? – ian

+0

см. Мой обновленный ответ –

+0

Спасибо, но не работает. 2015-03-14 17:14:21.572 lean_tabbed_v4 [49324: 1512729] - [__ NSCFString objectForKeyedSubscript:]: непризнанный селектор, отправленный в экземпляр 0x7fbbb272fe60 – ian

1

Это PFObject с (из рамки parse.com), и PFObject реализует description этим способом. PFObjects реализует словарь-подобный интерфейс, который равен fully described here.

С должным уважением к другим лицам, как правило, набирать их как id, а также использовать KVO для доступа к их свойствам. Кроме того, messageBody представляется столбцом типа string. Обработка в качестве словаря будет непродуктивной.

PFObjects следует относиться так:

for (PFObject *pfObject in objects) { 
    NSString *objectId = [pfObject objectId]; 
    NSDate *createdAt = [pfObject createdAt]; 
    NSString *messageBody = [pfObject objectForKey:@"messageBody"]; 
    NSString *senderId = [pfObject objectForKey:@"senderId"]; 
    // and so on 
    NSLog(@"This object has id %@ created at %@, senderId %@", objectId, createdAt, senderId); 
} 

Я знаю your other recent SO question о том, как получить и массив senderIds из этого массива. Извлечение senderId должно быть очевидно из этого кода, но (a) вам, вероятно, не нужен новый массив, основанный на потребности в пользовательском интерфейсе (таблица разговоров), и (б) я думаю, что вы действительно ищете senderName и это может означать существенное изменение того, как вы реализовали отношения между элементами синтаксического анализа.

Я постараюсь ответить далее на этот другой вопрос, но этот явно связан.

+0

Спасибо danh !!!! – ian

+0

проверить мой обновленный вопрос на картинке таблицы – ian

+0

Получил. Как я подозревал, не совсем то, что вам нужно для достижения цели пользовательского интерфейса. Я расскажу о другом – danh

Смежные вопросы