2011-11-25 39 views
6

Tôi đang gặp sự cố khi cố tải một ô mẫu thử khi bật Voiceover. Ứng dụng gặp sự cố và tôi gặp lỗiios 5 ô mẫu thử nghiệm và sự cố VoiceOver

Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:] 

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 

Điều này chỉ xảy ra khi VoiceOver bật, nếu không ứng dụng sẽ chạy tốt. Bất kỳ giúp đỡ?

+0

Nếu có ai khác gặp sự cố với vấn đề này, tôi đã gửi một lỗi về táo về vấn đề này. –

+0

Tôi có cùng một vấn đề! Hôm nay tôi đã bắt đầu thêm gợi ý về trợ năng và nội dung vào ứng dụng của tôi. Điều đó thật sự rất tệ. Bạn có thể thêm id radar ở đây để tôi/chúng tôi có thể sao chép lỗi. Tôi vẫn nhận được lỗi đó trong phiên bản beta 5.1 2! –

+0

@ChristianBeer tìm thấy lỗi của bạn trong Open Radar và đã đánh lừa nó. (rdar: // 10763569) Cảm ơn. – edelaney05

Trả lời

0

Tôi không chắc liệu tôi có đúng điều này hay không, nhưng điều này đã giúp tôi. Trong UITableViewDataSource:

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

    [...] 

    UITableViewCell *standardCell; 
    if (UIAccessibilityIsVoiceOverRunning()) { 
     standardCell = [tableView dequeueReusableCellWithIdentifier:@"VO Cell"]; 
    } else { 
     standardCell = [tableView dequeueReusableCellWithIdentifier:@"Regular Cell"]; 
    } 

    //Configure the cell 
    [...] 

    return standardCell; 

} 

Tôi tin rằng nó là trường hợp mà iOS lưu trữ tế bào mà không có tính khả năng tiếp cận nếu VoiceOver bị tắt vì lý do hiệu suất. Vì vậy, Mã định danh mặc định bạn sử dụng có thể liên quan đến Ô được lưu trong bộ nhớ cache không có các thuộc tính này. Khi VoiceOver được bật và iOS cố gắng dequeue các ô này, nó không tìm thấy các thuộc tính trong đó và phá vỡ. Bằng cách có các Mã định danh khác nhau, bạn buộc iOS lưu vào bộ nhớ cache các ô mới khi VO đang bật.

Một lần nữa, đây chỉ là giả định tôi đang thực hiện, nhưng trường hợp là tôi không gặp vấn đề này khi tôi loại bỏ các ô theo cách này. Tuy nhiên, nếu bạn dequeue chúng theo cách tôi đã đề cập, bạn sẽ phải xem ra một lỗi có thể xảy ra:

Nếu bạn khử các ô có số nhận dạng được đặt trong tệp .xib hoặc trong bảng phân cảnh, như trong hình dưới đây, bạn sẽ phải đặt một Prototype Cell khác với VO Reuse Identifier. Reuse Identifier set in Interface Builder

Các vấn đề liên quan