2014-05-05 82 views
0

UITableViewController显示游戏中的分数。
得分将显示1,5,1,13
他们保存的顺序,但看了他们刚刚开始改变顺序的分数两三次的分数。该分数将显示
5,1,1,13或1,13,1,5
我使用此代码为什么每次在UITableViewController中以不同的顺序显示我的Core Data?

-(void)saveDate 
{ 
    NSManagedObjectContext *context = [self managedObjectContext]; 
    NSManagedObject *newScore = [NSEntityDescription insertNewObjectForEntityForName:@"Scores" inManagedObjectContext:context]; 
    NSNumber *theScore = [[NSNumber alloc]initWithInt:self.score]; 
    [newScore setValue:theScore forKeyPath:@"score"]; 
} 

我的实体名称为 “成绩” 拯救分数和我有有其中一个属性称为“得分”。
我加载Core DataTableView内部ViewDidLoad

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Scores"]; 
    self.scores = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy]; 
    [self.tableView reloadData]; 
} 

self.scores是@propertyNSMutableArray,我将数据复制到这样我在NumberOfRows使用我使用[self.scores count];
这是我管理的对象上下文的代码。

 - (NSManagedObjectContext *)managedObjectContext 
{ 
    NSManagedObjectContext *context = nil; 
    id delegate = [[UIApplication sharedApplication] delegate]; 
    if ([delegate performSelector:@selector(managedObjectContext)]) { 
     context = [delegate managedObjectContext]; 
    } 
    return context; 
} 

要显示我使用此代码

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; 

    // Configure the cell... 
    NSManagedObject *number = [self.scores objectAtIndex:indexPath.row]; 
    [cell.textLabel setText:[NSString stringWithFormat:@"Score: %@", [number valueForKey:@"score"]]]; 
} 

我使用该确切的代码对于另一个应用程序和在表中的数据总是显示在保存它的确切顺序的细胞。我已经阅读了很多文档,并在使用该方法进行回答之前搜索了其他地方。我明白为什么信息会改变秩序。谢谢你的帮助!

回答

2

您需要设置NSFetchRequest的sortDescriptors。我无法回答为什么其他应用程序中的相同代码每次都以相同的顺序返回数据。我在文档中看到的没有任何内容说明在没有附加排序描述符的获取请求期间返回结果的顺序。例如,如果你有一个叫做“名”属性的实体,你会想是

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
+0

谢谢!我刚才看到在我的最后一个应用程序中使用了NSSortDescriptor。 – lostAtSeaJoshua

0

有关代码的几个注意事项。

首先检索排序结果,您应该使用排序描述符来对照您的乐谱属性。

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"score" 
    ascending:YES]; 
NSArray *sortDescriptors = @[sortDescriptor]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

二,做好运行没有通过零的错误,并检查返回值的请求。

NSError *error; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 
if (fetchedObjects == nil) { 
    // Handle the error. 
} 

最后,UITableView小号打交道时采取的NSFetchedResultsController优势。

+0

谢谢!这也是一个很好的答案! – lostAtSeaJoshua

相关问题