【问题标题】:Sequence of CoreData inserting in iphone is not as I am inserting在 iphone 中插入的 CoreData 序列与我插入的不同
【发布时间】:2013-05-30 21:34:31
【问题描述】:

我在coredata中插入了一些对象,但是当我检索它们时,它们的顺序与我插入的不同,甚至索引也得到了妥善管理,

-(void)addQuestion
 {
NSManagedObjectContext *context = [self managedObjectContext];

NSMutableArray *array = [[NSMutableArray alloc] init];

[array addObject:@"What is capital of Australia?"];
[array addObject:@"What is capital of Canada?"];
[array addObject:@"What is capital of UAE?"];
[array addObject:@"What is capital of USA?"];
[array addObject:@"What is capital of Pakistan?"];
[array addObject:@"What is capital of China?"];
[array addObject:@"What is capital of UK?"];
[array addObject:@"What is capital of Russia?"];
[array addObject:@"What is capital of Romania?"];
[array addObject:@"What is capital of Germany?"];


for (int x = 0; x<10; x++) {

    Question *question = [NSEntityDescription
                          insertNewObjectForEntityForName:@"Question"
                          inManagedObjectContext:context];
    question.question =  [array objectAtIndex:x];
    question.answer = @"Testville";
    question.mcqsa = @"Sydney";
    question.mcqsb = @"Canbera";
    question.mcqsc =  @"Berlin";
    question.mcqsd = @"Bern";

}



NSError *error;
if (![context save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}

// Test listing all FailedBankInfos from the store
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question"
                                          inManagedObjectContext:context];
[fetchRequest setEntity:entity];


NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

for (Question *info in fetchedObjects) {
    NSLog(@"Name: %@", info.question);
}

}

日志显示

2013-06-04 17:59:59.978 iQuiz[972:c07] Name: What is capital of Romania?
2013-06-04 17:59:59.979 iQuiz[972:c07] Name: What is capital of Australia?
2013-06-04 17:59:59.979 iQuiz[972:c07] Name: What is capital of Pakistan?  
2013-06-04 17:59:59.980 iQuiz[972:c07] Name: What is capital of Russia? 
2013-06-04 17:59:59.980 iQuiz[972:c07] Name: What is capital of USA?
2013-06-04 17:59:59.981 iQuiz[972:c07] Name: What is capital of UK?
2013-06-04 17:59:59.981 iQuiz[972:c07] Name: What is capital of UAE?
2013-06-04 17:59:59.982 iQuiz[972:c07] Name: What is capital of Germany?
2013-06-04 17:59:59.982 iQuiz[972:c07] Name: What is capital of China?
2013-06-04 17:59:59.982 iQuiz[972:c07] Name: What is capital of Canada?

【问题讨论】:

标签: ios core-data


【解决方案1】:

这是正常行为。不保证广告订单(或与此相关的任何订单)。如果顺序很重要,请添加一个额外的属性 index,您可以在获取对象时递增并对其进行排序。

【讨论】:

  • 整数 16、32 或 64,我应该使用哪个?
  • 这在一定程度上取决于您希望拥有多少条记录。整数 16 最多可提供 65535 条记录,整数 32 4294967295 和整数 64 18446744073709600000。我想说可能是 32。
  • 并且当我将 NSInteger 添加到对象时也出现错误,具有 strong 和 retain 属性的属性必须是对象类型。当我在 Question.h @property (nonatomic, retain) NSInteger *index; 中编写代码时,它就出现了
  • 别这样写。让 Xcode 为你生成 NSManagedObject 子类。
  • 但是我之前生成过,然后更新了属性,所以现在
【解决方案2】:

解决这个问题的另一种方法是建立关系而不是属性。然后将关系设置为有序。

【讨论】:

    【解决方案3】:

    是的,这很正常。完全。只需自己跟踪 id 并在查询时使用 NSSortDescriptor 对其进行排序。这是推荐的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多