2009-12-09 60 views
0

我有一个问题,无论何时我使用coredata插入数据,一切都很好。但是在检索时,我总是检索到相同的对象。我用add方法插入了多个属性的actor对象,比如id,name,address等,我可以看到插入的所有东西(实际上我是从xml文件中检索的)。我的设置方法是:=coredata问题

[poi setActorCity:[NSString stringWithFormat:@"%@",[poi1 objectAtIndex:j]]]; 

其中,poi是我的一个对象managedObjectClass POI1。这是一个问题吗? j指数仅用于跟踪poi1数组中的xml值。请帮助...

  • (无效)的addEvent {

[actorsArray removeAllObjects]

NSEntityDescription * entity1 = [NSEntityDescription entityForName:@“POI1”inManagedObjectContext:self.managedObjectContext]; POI1 * poi =(POI1 *)[NSEntityDescription insertNewObjectForEntityForName:@“POI1”inManagedObjectContext:managedObjectContext];

for(NSInteger i=0;i<[Actors count];i++) 
{ 
    NSMutableArray *poi1=[[NSMutableArray alloc]init]; 
    poi1=[Actors objectAtIndex:i]; 
    for(int j=0;j<[poi1 count];j++) 
    { 
     if(j==1) 
     { 
      [poi setActorName:[NSString stringWithFormat:@"%@",[poi1 objectAtIndex:j]]]; 

     } //Like this it inserts for every attribute 
      } 
    [actorsArray insertObject:poi atIndex:i];  
    [poi release]; 
} 
[self saveAction]; //saving the managedObjectContext 

}

这我取方法...

- (无效)fetchResult {

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

NSEntityDescription *使用实体= [NSEntityDescription entityForName:@ “再喷射Pol1” inManagedObjectContext:self.managedObjectContext];

[fetchRequest setEntity:entity1];

NSArray *items = [self.managedObjectContext 
       executeFetchRequest:fetchRequest error:&error]; 

for(NSInteger k=0;k<[items count];k++) 
{ 
    POI1 *_poi=[[POI1 alloc]init]; 
     _poi = [items objectAtIndex:k]; 
     NSString *str=[NSString stringWithFormat:@"%@",[_poi actorName]]; //This' for testing... Shows me same name every time.., 
} 

[fetchRequest release];  

}

+0

嗨,如果您在一行的前面添加4个空格,它将被格式化为代码。 。 。 – deanWombourne 2009-12-09 13:02:37

+0

我们需要关于该问题的更多信息;你能向我们展示创建你的poi对象的循环 - 我认为文森特可能会走在正确的轨道上,但我们需要看到更多的代码,以确保:) – deanWombourne 2009-12-09 13:04:36

+0

我将你的两个相同的问题合并为一个。请不要发布重复。如果您希望更多人看到您的问题,可以通过添加新信息和有关您所面临问题的更多详细信息来编辑原件。 – 2009-12-09 15:13:49

回答

0

听起来好像你的抓取有问题。检查你的谓词。如果它返回相同的对象,最可能的原因是你的谓词被写成只能找到一个对象。

Edit01:

这条线是你的问题:

POI1 *poi = (POI1 *)[NSEntityDescription insertNewObjectForEntityForName:@"POI1" inManagedObjectContext:managedObjectContext]; 

尽管称为类是“NSEntityDescription”这个方法返回一个管理对象实例。现在您创建一个POI1实例,然后继续为其分配不同的属性。您看到相同的值,因为您只创建,填充并保存了一个对象。

移动对象创建内循环:

for(NSInteger i=0;i<[Actors count];i++) 
{ 
     POI1 *poi = (POI1 *)[NSEntityDescription insertNewObjectForEntityForName:@"POI1" inManagedObjectContext:managedObjectContext]; 
     NSMutableArray *poi1=[[NSMutableArray alloc]init]; 
     poi1=[Actors objectAtIndex:i]; 
     for(int j=0;j<[poi1 count];j++) 
     { 
       if(j==1) 
       { 
         [poi setActorName:[NSString stringWithFormat:@"%@",[poi1 objectAtIndex:j]]]; 

       } //Like this it inserts for every attribute 
         } 
     [actorsArray insertObject:poi atIndex:i];    
     [poi release]; 
} 

这将在每遍创建一个新的POI1使得Actors阵列的各元件将具有包含其数据对应的POI1实例。

+0

请检查我编辑的问题,先生...谢谢你... – neha 2009-12-12 10:26:34

+0

Dat很棒!它的工作...非常感谢你...! – neha 2009-12-14 10:06:57

+0

请点击我的答案旁边的复选标记,以便每个人都知道被问答的答案。 – TechZen 2009-12-14 16:28:46

0

有一点很难与这些信息准确回答,但我的猜测是,你不创造新的POI实例每次和不断增加的同一引用您的阵列。

+0

先生,我编辑了我的问题并提供了详细的代码。请看看...提前感谢您... – neha 2009-12-12 10:24:15

0

确保您在完成所有这些插入操作后(可能在每次插入后)保存managedObjectContext,否则信息将永远不会留下临时内存。

+0

我正在保存它,先生...请检查我的原始问题,因为我已经使用我的添加和获取方法进行了编辑..提前感谢您... – neha 2009-12-12 10:25:33