从CoreData中的WCF服务保存记录

时间:2012-09-20 03:12:38

标签: objective-c core-data sqlite sudzc

我是iOS开发和CoreData的新手。我正在调用一个.Net WCF服务,用于在我的app中的UITableViewcontroller中显示数据。我将这些数据保存在CoreData中。当我在服务器上添加一条新记录时,我想让它显示在UITableViewController中以及保存在CoreData中。但这并没有发生。我必须在模拟器上执行“重置内容和设置”,然后运行应用程序再次。当我这样做时,应用程序显示来自服务的最新记录。它还将新记录保存在CoreData中。我正在使用SUDZC与wcf服务进行交互。调用服务的代码,在UITableViewController中显示数据并将其保存到CoreData看起来像这样:

- (void)viewDidLoad
{
    [super viewDidLoad];
     self.detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController];

    [my_table setDataSource:self];
    [my_table setDelegate:self];

     EDViPadDocSyncService *service = [[EDViPadDocSyncService alloc]init];
     [service getAllCategories:self action:@selector(handleGetAllCategories:)];

}

-(void)handleGetAllCategories:(id)value
{
    if([value isKindOfClass:[NSError class]])
    {
        NSLog(@"This is an error %@",value);
        return;
    }

    if([value isKindOfClass:[SoapFault class]])
    {
        NSLog(@"this is a soap fault %@",value);
        return;
    }
    NSMutableArray *result = (NSMutableArray*)value;

    self.myData = [[NSMutableArray array] init];//array for storing 'category name'
    self.catId = [[NSMutableArray array]init];//array for storing 'category ID'    

    self.myData=[self getCategories];

    /*store data in Core Data - START*/
    NSMutableArray *coreDataCategoryarray = [[NSMutableArray alloc]init];
    NSManagedObjectContext *context = [self managedObjectContext];
    Categories *newCategory;//this is the CoreData 'Category' object
    for(int j=0;j<[result count];j++)
    {
        EDVCategory *edvCat = [[EDVCategory alloc]init];//this is the SUDZC 'Category' object
        edvCat = [result objectAtIndex:j];

        if ([self.catId count]>0) {
                for (int i=0; i<[self.catId count]; i++) {

                    if ([edvCat categoryId] == [[self.catId objectAtIndex:i] integerValue]) {
                        checkFlag=TRUE;
                    }
                }
        }
        if (checkFlag == FALSE) {
            newCategory = [NSEntityDescription insertNewObjectForEntityForName:@"Categories" inManagedObjectContext:context];
            [newCategory setCategoryId:[NSNumber numberWithInt:[edvCat categoryId]]];
            [newCategory setCategoryName:edvCat.categoryName];
            [newCategory setDocCount:[NSNumber numberWithInt:[edvCat docCount]]];
            [newCategory setCategoryType:[NSNumber numberWithShort:[edvCat categoryType]]];
            [newCategory setSubCategoryId:[NSNumber numberWithInt:[edvCat subCategoryId]]];
            [coreDataCategoryarray addObject:newCategory];
        }
    }
    /*store data in Core Data - END*/

    NSError *error = nil;
    if (![context save:&error])
    {
        [coreDataCategoryarray release];
    }
    else
    {
        //return [coreDataCategoryarray autorelease];
        [coreDataCategoryarray autorelease];
    }
    self.myData=[self getCategories];
    [my_table reloadData]; 
}

-(NSMutableArray *)getCategories
{
    NSFetchRequest  *request = [[[NSFetchRequest alloc] init]autorelease];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Categories" inManagedObjectContext:__managedObjectContext];

    NSSortDescriptor *sortByName = [[[NSSortDescriptor alloc] initWithKey:@"categoryId" ascending:YES] autorelease];
    [request setSortDescriptors:[NSArray arrayWithObject:sortByName]];

    [request setEntity:entity];
    entity = nil;

    NSError *error = nil;
    NSMutableArray *fetchResults = [[__managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    [request setReturnsObjectsAsFaults:NO];

    NSManagedObject *aTabrss;
    NSMutableArray *arForGetCategory=[[NSMutableArray alloc]init];

    for (aTabrss in fetchResults){
        [arForGetCategory addObject:[aTabrss valueForKey:@"categoryName"]];
        [self.catId addObject:[aTabrss valueForKey:@"categoryId"]];
    }
    return (arForGetCategory);
}

我应该在代码中进行哪些更改,以便它反映服务的最新数据并同时将其保存到CoreData(sqlite)?