2013-03-03 4 views
0

Я создал приложение Universal Master Details. Я использовал Storyboard для IPad и iPhone. Я фактически делаю HTTP-запрос для извлечения необходимых данных, которые будут представлены в главном представлении таблицы. Я перезагружаю данные таблицы из метода requestFinished.IPAD vs Iphone Таблицы TableView

- (void)requestFinished:(ASIHTTPRequest *)request { 

NSString *responseString = [request responseString]; 

ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance]; 

conversationList = [responseString JSONValue]; 

[dataControllerSingleton setConversationList:conversationList]; 

[self.tableView reloadData]; 
} 

хранить полученные данные в dataControllerSingleton, который имеет свойство NSMutableArray под названием conversationList.

В поле numberOfRowsInSection я печатаю количество объектов в этом разделе на основе fetchedResultsController. Я также распечатываю количество значений в моем списке рассылки NSMutableArray. В numberOfSectionsInTableView я распечатываю количество разделов.

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

id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section]; 
NSLog(@"Number OF Objects in section %lu",(unsigned long)[sectionInfo numberOfObjects]); 
ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance]; 

NSLog(@"ConversationList count %lu",(unsigned long)[dataControllerSingleton.conversationList count]); 

return [sectionInfo numberOfObjects]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
NSLog(@"Number of sections: %d",[[self.fetchedResultsController sections] count]); 
return [[self.fetchedResultsController sections] count]; 
} 

Так что, когда я использую NSLog, чтобы узнать, сколько раздел и строк У меня есть я получаю количество объектов в разделе 2 ConversationList подсчитывать 46
Количество секций 1

В моей cellForRowAtIndexPath Я добавляя текст ячейки из моего NSMutableArray

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
UITableViewCell *cell = [tableView 
         dequeueReusableCellWithIdentifier:@"ConversationCell"]; 
[self configureCell:cell atIndexPath:indexPath]; 

ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance]; 
cell.textLabel.text = [dataControllerSingleton.conversationList objectAtIndex:indexPath.row]; 

return cell; 
} 

Итак, с этой установкой, я вижу два значения в мастер зрения как для iPhone и IPad. Когда я выбираю одно из этих значений в главном представлении, я перейду к подробному представлению (которое сейчас пустое). Это работает без ошибок для двух строк, которые представлены.

Если я изменяю номерOfRowsInSection, чтобы возвращать количество значений в моем NSMutableArray return [self.conversationList count]; Я сталкиваюсь с ошибками.

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

id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section]; 
NSLog(@"Number OF Objects in section %lu",(unsigned long)[sectionInfo numberOfObjects]); 
ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance]; 

NSLog(@"ConversationList count %lu",(unsigned long)[dataControllerSingleton.conversationList count]); 

//return [sectionInfo numberOfObjects]; 
return [self.conversationList count]; 
} 

На симуляторе iPhone в представлении мастера представлены 46 значений. Я могу выбрать любой из них, и мне представляется (пустой) подробный вид. На симуляторе iPad, если я выберу одну из первых двух ячеек, мне представляется (пустой) подробный вид, как и ожидалось. Однако, когда я выбираю любое значение за первые два, я получаю следующую ошибку;

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -  [_PFBatchFaultingArray objectAtIndex:]: index (2) beyond bounds (2)' 
*** First throw call stack: 
(0x19a5012 0x17cae7e 0x19a4deb 0x156941a 0x15e9511 0x42fe9 0x4ae285 0x4ae4ed 0xeb85b3 0x1964376 0x1963e06 0x194ba82 0x194af44 0x194ae1b 0x249b7e3 0x249b668 0x3feffc 0x40e0d 0x2ac5) 
libc++abi.dylib: terminate called throwing an exception 

Любая помощь была бы принята с благодарностью. Заранее спасибо. Tim

ответ

0

Если вы используете более одного раздела (который он выглядит, как вы), а затем передать метод

tableView:(UITableView *)tableView cellForRowAtIndexPath: 

должны быть действительно ее обработки.

Вы также, кажется, смешиваете использование NSFetchedResultsController для определения количества разделов и строк, но затем используя свойство self.conversionList, чтобы вернуть количество строк. Но для какого раздела. Если вы хотите использовать Core Data, то вместо того, чтобы использовать синглтон с массивом, кэшировать данные с веб-сервера в таблицу основных данных и использовать его в вашем методе

- (NSFetchedResultsController *)fetchedResultsController 

.

Также вы смешиваете использование self.conversionList &

ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance]; 
dataControllerSingleton.conversationList 

они так же?

+0

Большое спасибо за помощь. Я собираюсь использовать Core Data, очистить свой код и пересмотреть эту проблему. –

+0

Еще раз спасибо за отзыв. Когда я создал универсальное приложение, я проверил Core Data и не использовал Core Data правильно. Я не использовал Core Data, и я снова работаю. Цените помощь. –

0

Пожалуйста, добавьте libz.dylib в свой проект. Его можно добавить на вкладке «Фазы сборки». Там у вас есть ссылка на раздел библиотек Binarry. Нажмите символ «+» и добавить libz.dylib к вашему проекту

+0

Спасибо Vinodn. У меня есть libz.1.1.3.dylib. –