我创建了一个Universal Master Details应用程序。我在IPad和iPhone上使用了Storyboard。我实际上正在发出一个HTTP请求来检索将在主tableview中显示的所需数据。我从requestFinished方法重新加载tableview数据。
- (void)requestFinished:(ASIHTTPRequest *)request {
NSString *responseString = [request responseString];
ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance];
conversationList = [responseString JSONValue];
[dataControllerSingleton setConversationList:conversationList];
[self.tableView reloadData];
}
我将返回的数据存储在dataControllerSingleton中,该数据包含一个名为conversationList的NSMutableArray属性。
在numberOfRowsInSection中,我根据fetchedResultsController打印出该部分中的对象数。我还打印出NSMutableArray conversationList中的值的数量。在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节中的对象数量
会话列表计数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的主视图中看到两个值。当我在主视图中选择其中一个值时,我将进入详细视图(现在它只是空的)。这对于显示的两行没有任何错误。
如果我更改numberOfRowsInSection以返回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
非常感谢任何帮助。提前致谢。 添
答案 0 :(得分:0)
请将libz.dylib添加到您的项目中。它可以在“构建阶段”选项卡中添加。在那里,您有Binarry图书馆部分的链接。单击“+”符号并将libz.dylib添加到项目中
答案 1 :(得分:0)
如果您使用多个部分(看起来像是这样),则委托方法
tableView:(UITableView *)tableView cellForRowAtIndexPath:
应该真正处理这个。
您似乎也在混合使用NSFetchedResultsController来计算节和行的数量,但是然后使用属性self.conversionList来返回行数。但是哪个部分。如果您想使用Core Data,而不是使用带有数组的单例,请将Web服务器中的数据缓存到核心数据表中并在
中使用它- (NSFetchedResultsController *)fetchedResultsController
方法
你也混合使用self.conversionList&amp;
ConversationDataController *dataControllerSingleton = [ConversationDataController sharedInstance];
dataControllerSingleton.conversationList
他们俩都一样吗?