Parse Chat Room - Преобразование массива NS в NSMutableArray для DIsplay в табличном представлении

Я пытаюсь создать чат и показать "доступные чаты" в виде таблицы. Я пытаюсь превратить * объект NSArray в NSMutableArray, используя mutableCopy и отображать это на tableView ... но, кажется, постоянно сбой....

любая помощь приветствуется.

.час

@interface MMKMatchesViewController1: UITableViewController

.m

@interface MMKMatchesViewController1 () //

@property (сильный, неатомный) IBOutlet UITableView *tableView; @property (сильный, неатомный) NSMutableArray *availableChatRooms;

Код для обновления чатов

-(NSMutableArray *)availableChatRooms { if (!_AvailableChatRooms){ _availableChatRooms = [[NSMutableArray alloc] init]; } return _availableChatRooms; }

Это то, что должно обновить tableView

  • (void) updateAvailableChatRooms {PFQuery * query = [PFQuery queryWithClassName: @ "ChatRoom"];

    [query whereKey: @ "user1" equalTo: [PFUser currentUser]];

    PFQuery * queryInverse = [PFQuery queryWithClassName: @ "ChatRoom"];

    [query whereKey: @ "user2" equalTo: [PFUser currentUser]];

    PFQuery * queryCombined = [PFQuery orQueryWithSubqueries: @ [query, queryInverse]];

    // [queryCombined includeKey: @ "chat"];

    [queryCombined includeKey: @ "user1"];

    [queryCombined includeKey: @ "user2"];

    [queryCombined findObjectsInBackgroundWithBlock: ^ (объекты NSArray *, ошибка NSError *) {

    if (!error){
    
        [self.availableChatRooms removeAllObjects];
    
        [self.tableView reloadData];
    
        //[self.availableChatRooms addObjectsFromArray:objects]; <---NEED HELP HERE :-(
    
        [self.availableChatRooms = objects mutableCopy];         <---NEED HELP HERE :-(
    
        [self.tableView reloadData];
    
    
    }
    

    }]; }

Источник данных таблицы

  • (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) section {

return [self.availableChatRooms count];

}

  • (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath {

    статическая NSString * CellIdentifier = @ "Cell";

    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier forIndexPath: indexPath];

    PFObject * chatRoom = [self.availableChatRooms objectAtIndex: indexPath.row];

    PFUser * понравился пользователь;

    PFUser * currentUser = [PFUser currentUser];

    PFUser * testUser1 = chatRoom [@ "user1"];

    if ([testUser1.objectId isEqual: currentUser.objectId]) {

    likedUser =[chatRoom objectForKey:@"user2"];
    

    } еще {

    likedUser = [chatRoom objectForKey:@"user1"];
    

    }

    cell.textLabel.text =iledUser [@ "profile"] [@ "firstName"];

    // 344

    //cell.imageView.image = заполнитель изображения

    cell.imageView.contentMode = UIViewContentModeScaleAspectFit;

    PFQuery * queryForPhoto = [[PFQuery alloc] initWithClassName: @ "Photo"];

    [queryForPhoto whereKey: @ "user" equalTo:iledUser];

    [queryForPhoto findObjectsInBackgroundWithBlock: ^ (объекты NSArray *, ошибка NSError *) {

    if ([objects count] > 0){
    
        PFObject *photo = objects[0];
    
        PFFile *pictureFile = photo[kMMKPhotoPictureKey];
    
        [pictureFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
    
            cell.imageView.image =[UIImage imageWithData:data];
    
            cell.imageView.contentMode = UIViewContentModeScaleAspectFit;
        }];
    }
    

    }];

    возвратная ячейка; }

@JAMIE - ошибка, которая появляется, когда я нажимаю кнопку, чтобы перейти в окно чата.

2014-11-08 12:34:21.468 Project1[19993:244958] *** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /SourceCache/UIKit_Sim/UIKit-3318.16.14/UITableView.m:6116
2014-11-08 12:34:21.472 Project1[19993:244958] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier Cell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000109727f35 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001093c0bb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000109727d9a +[NSException raise:format:arguments:] + 106
    3   Foundation                          0x00000001076595df -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
    4   UIKit                               0x000000010806f864 -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:] + 153
    5   Jobazo                              0x000000010641877d -[MMKMatchesViewController1 tableView:cellForRowAtIndexPath:] + 109
    6   UIKit                               0x000000010807c4b3 -[UITableView _createPreparedCellForGlobalRow:withIndexPath:willDisplay:] + 508
    7   UIKit                               0x000000010805bfb1 -[UITableView _updateVisibleCellsNow:isRecursive:] + 2846
    8   UIKit                               0x0000000108071e3c -[UITableView layoutSubviews] + 213
    9   UIKit                               0x0000000107ffe973 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 521
    10  QuartzCore                          0x0000000107c92de8 -[CALayer layoutSublayers] + 150
    11  QuartzCore                          0x0000000107c87a0e _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
    12  QuartzCore                          0x0000000107c8787e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
    13  QuartzCore                          0x0000000107bf563e _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 242
    14  QuartzCore                          0x0000000107bf674a _ZN2CA11Transaction6commitEv + 390
    15  QuartzCore                          0x0000000107bf6db5 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 89
    16  CoreFoundation                      0x000000010965cdc7 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    17  CoreFoundation                      0x000000010965cd20 __CFRunLoopDoObservers + 368
    18  CoreFoundation                      0x0000000109652b53 __CFRunLoopRun + 1123
    19  CoreFoundation                      0x0000000109652486 CFRunLoopRunSpecific + 470
    20  GraphicsServices                    0x000000010a8ba9f0 GSEventRunModal + 161
    21  UIKit                               0x0000000107f85420 UIApplicationMain + 1282
    22  Project1                            0x0000000106417c93 main + 115
    23  libdyld.dylib                       0x0000000109c54145 start + 1
    24  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException

Спасибо!

2 ответа

Решение

Предполагая, что это не просто опечатка, когда вы скопировали ее в SO, ваш синтаксис неправильный. Вот твоя проблема.

[self.availableChatRooms = objects mutableCopy];         <---NEED HELP HERE :-(

Хотя тот факт, что вы сказали, что это вылетает, немного смущает меня, если бы это была проблема, я подозреваю, что она не скомпилируется.

Что вы хотите сделать, это

self.availableChatRooms = [objects mutableCopy];

Квадратные скобки используются для передачи сообщений в target-c (это и некоторые другие вещи), поэтому вы будете вызывать метод в availableChatRooms, но вы пытаетесь выполнить назначение в нем.

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


РЕДАКТИРОВАТЬ:

Согласно документации на сайте разработчика.

Вы должны зарегистрировать файл класса или пера, используя registerNib:forCellReuseIdentifier: или же registerClass:forCellReuseIdentifier: метод перед вызовом этого метода.

Я не знаю, как выглядит остальная часть вашего кода, но я предполагаю, что именно в этом и заключается проблема.

Если вы создаете ячейки табличного представления в раскадровке, он позаботится о регистрации пера для вас, и вы можете использовать dequeueReusableCellWithIdentifier: метод, см. документы здесь

(Будьте осторожны, так как этот метод просто вернет nil, если в очереди нет ячеек, поэтому вам нужно будет создать новую ячейку самостоятельно, если она вернет nil) и убедитесь, что идентификаторы ваших ячеек совпадают с идентификаторами в вашей раскадровке.

Это самая отличная ошибка.

[self.availableChatRooms = objects mutableCopy];

[] нужен объект с левой стороны и сообщение с правой стороны.

Объект

self.availableChatRooms = objects

Здесь вы используете оператор присваивания, который назначает "объекты" для "self.availableChatRooms", и результатом этого оператора присваивания является self.availableChatRooms, который совпадает с объектами.

Затем вы отправляете объекту сообщение "mutableCopy". Который создает изменчивую копию, и поскольку вы не сказали компилятору, что делать с результатом, он выбрасывается. То, что вы написали, так же, как

self.availableChatRooms = objects;
[self.availableChatRooms mutableCopy]; 

Вы хотели

self.availableChatRooms = [objects mutableCopy];

Я предлагаю вам включить все предупреждения в Xcode. Я не пробовал, но ожидал, что ваш код генерирует какое-то предупреждение.

Другие вопросы по тегам