Отображение номера значка iOS / Обработка непрочитанных сообщений (xCode - OBJECTIVE-C)
Я хотел бы обновить значок "Входящие", чтобы отображать количество непрочитанных сообщений (мои сообщения не самоуничтожаются, приложение похоже на сообщения iOS).
Когда пользователь нажимает на сообщения и возвращается на вкладку "Входящие", значок должен быть обновлен. Кроме того, я хотел бы отметить цвет фона непрочитанных ячеек иначе, чем ячейки чтения... таким образом, пользователь знает, что было прочитано, а что нет.
У меня есть рабочий код, но сейчас я получаю:
"Предупреждение: в основном потоке выполняется длительная операция. Перерыв в warnBlockingOperationOnMainThread() для отладки."
Вот код, который у меня есть для обновления непрочитанных сообщений:
PFQuery *query = [PFQuery queryWithClassName:@"Messages"];
[query whereKey:@"recipientIds" equalTo:[[PFUser currentUser] objectId]];
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (error) {
NSLog(@"Error: %@ %@", error, [error userInfo]);
} else {
// messages were found!
self.messages = objects;
//find unread messages
[query whereKey:@"readBy" notEqualTo:[[PFUser currentUser] objectId]];
self.unreadMessages = [query findObjects];
// set badge # to number of msgs
if (self.unreadMessages.count > 0) {
[[self navigationController] tabBarItem].badgeValue = [NSString stringWithFormat:@"%lu", (unsigned long)self.unreadMessages.count];
}
[self.tableView reloadData];
код для обновления ячейки:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
PFObject *message = [self.messages objectAtIndex:indexPath.row];
cell.textLabel.text = [message objectForKey:@"senderEmail"];
if ([self.unreadMessages containsObject:message]) {
// color background gray, bold the font
}else{
// leave cell alone
}
1 ответ
Решение
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
if (!error)
{
self.unreadMessages = [NSMutableArray arrayWithArray:objects];
// set badge # to number of msgs
if (self.unreadMessages.count > 0)
{
[[self navigationController] tabBarItem].badgeValue = [NSString stringWithFormat:@"%lu", (unsigned long)self.unreadMessages.count];
}
[self.tableView reloadData];
}
}