2014-10-08 53 views
0

,当我从获取核心数据记录,它返回空值...我不知道是什么问题...无法从核心数据获取的数据文件

当我NSLog检查显示像这样:

"<Ad: 0x979fb30> (entity: Ad; id: 0x9799470 <x-coredata://B3AA111F-8307-4A16-B898- 
403A804DFDFB/Ad/p22> ; data: <fault>)", 
"<Ad: 0x979fd70> (entity: Ad; id: 0x9799480 <x-coredata://B3AA111F-8307-4A16-B898- 
403A804DFDFB/Ad/p23> ; data: <fault>) 

这是我的代码。 我将所有核心数据函数都返回到名为dbmanager的单独类中。

- (void)viewDidLoad 
{ 
DBManager *manager=[[DBManager alloc]init]; 
self.fetchedRecordsArray = [manager fetchAllAds]; 
[self.shoppingtbl reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
return [self.fetchedRecordsArray count]; 

} 

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

static NSString *CellIdentifier = @"ShoppingCart"; 
ShoppingCart *cell = (ShoppingCart*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier 
forIndexPath:indexPath]; 
cell.backgroundColor=[UIColor clearColor]; 
ad=[self.fetchedRecordsArray objectAtIndex:indexPath.row] 
cell.addesc.text = ad.data; 
cell.adId.text=[NSString stringWithFormat:@"%lu", (long)[ad.adId integerValue]]; 
cell.adstatus.text=[NSString stringWithFormat:@"%@",ad.state]; 
return cell; 
} 

实体名称为Ad。它包含Adid,状态,数据。

在表视图它显示字符串和0号空值..

+0

什么是self.fetchedRecordsArray viewDidLoad?你可以NSLog吗?另外,为什么你不使用NSFetchedResultsController? – djromero 2014-10-08 12:55:21

+0

当我检查Nslog它显示像这样“(实体:Ad; id:0x9a5a6c0 ;数据:) “, ”(实体:Ad; id:0x9a5a6d0 ;数据:)“ – user3354840 2014-10-08 13:00:38

+0

请更新问题以包含 - [DBManager fetchAllAds]的内容。这可能是核心数据上下文的问题。核心数据是一个复杂的主题,我建议你检查苹果示例数据和一些开源项目,看看如何正确使用它。那里有一些教程。 – djromero 2014-10-08 13:10:45

回答

0

我建议你放弃你fetchedRecordsArray,拥抱NSFetchedResultsController。它专门设计用于处理核心数据和表格视图。

这几乎可以消除你的问题,并产生更健壮和可扩展的代码。您可以以这种方式显示100.000s的广告,而不会有任何问题。

还有一个提示,即您可能要事先检查的内容:很可能您没有正确保存数据。它看起来像是在创建后用[managedObjectContext save:&error]保存了每条记录,但也许在填充状态和数据后没有正确执行此操作。检查的方法是枚举您的数组元素和NSLog这些信息位以检查它们是否在那里。

+0

嗨你几乎是正确的...我使用[managedObjectContext保存:&错误]来保存记录。而不是使用这种方法。有任何其他方法来保存记录? – user3354840 2014-10-09 04:53:14

+0

方法是正确的 - 问题可能出在您的上下文所处的**状态。如果我的回答有帮助,请先对它进行投票表决。 – Mundi 2014-10-10 10:46:30