通过视图控制器向实体添加数据

时间:2012-05-07 06:26:42

标签: ios core-data entity

我有一个案例,我应该通过UIViewController将对象插入实体。我设计了我的数据库模型(实体和属性)。我正在通过UIViewController添加实体。我应该在appDelegate.m中的didFinishLaunchingwithOptions方法中添加什么?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch   
    return YES;
}

对于TUTViewController(我自己的视图控制器 - UIViewController),我使用下面的代码插入对象。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
    NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
    NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

    NSString *stripped1 = [response stringByReplacingOccurrencesOfString:@"\r" withString:@""];
    NSMutableArray *rows = [NSMutableArray arrayWithArray:[stripped1 componentsSeparatedByString:@"\n"]];
    NSMutableArray *contentArray = [NSMutableArray arrayWithCapacity:[rows count]]; 
    NSMutableArray *contentArray1 = [NSMutableArray arrayWithCapacity:[rows count]];

    NSArray *components;
    NSLog(@"count:%d",[rows count]);

    for (int i=0;i<[rows count]; i++) {

       if(i == 0 || [[rows objectAtIndex:i] isEqualToString:@""]){
          continue;
       }

       components = [[rows objectAtIndex:i] componentsSeparatedByString:@","];
       id x = [components objectAtIndex:0] ;
       id y = [components objectAtIndex:1];
       id z = [components objectAtIndex:2];

       [contentArray addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x,@"X",y,@"Y", nil]];
       [contentArray1 addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:x,@"X",z,@"Y", nil]];

       [newManagedObject setValue:[x] forKey:@"timeStamp"];
       [newManagedObject setValue:[y] forKey:@"beat"];
       [newManagedObject setValue:[z] forKey:@"rate"];

       // Save the context.
       NSError *error = nil;
       if (![context save:&error]) {

           NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
           abort();

           NSLog(@"Contents of Uterus Contraction: %@",contentArray);
           NSLog(@"Contents of Heart Beat: %@",contentArray1);
       }    
    }
}

有什么我想念的吗?我最终得到了错误:

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:'+ entityForName:不能   找到实体名称'FetalData''

的NSManagedObjectModel

1 个答案:

答案 0 :(得分:0)

您是否设置了核心数据堆栈或UIManagedDocument对象?

如果您没有设置托管对象模型,则可能是问题所在。这意味着您可能没有加载定义FetalData实体的托管对象模型。有关详细信息,请参阅insertnewobjectforentityforname

我真的建议创建一个空项目,让Xcode为你创建Core Data的东西。通过这种方式,您可以看到代码的工作原理。

一些笔记

为什么使用NSFetchResultsController

在方法结束时移动save来电。通过这种方式,您可以避免多次往返磁盘。

如果您想开始使用Core Data,我建议您core-data-on-ios-5-tutorial-getting-started

希望它有所帮助。