Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 某些数据未保留在核心数据中_Objective C_Core Data_Entity - Fatal编程技术网

Objective c 某些数据未保留在核心数据中

Objective c 某些数据未保留在核心数据中,objective-c,core-data,entity,Objective C,Core Data,Entity,我有一个项目,在这个项目中,我使用来自多个web服务的数据,然后将它们存储在核心数据中的不同实体中。准确地说,有4个不同的实体。其中3个储存得很好。第四个存储在核心数据中,我可以稍后在其他视图中检索它,但如果我关闭应用程序并打开它,则InventoryImage实体似乎为空 - (void)viewDidLoad { [super viewDidLoad]; id delegate = [[UIApplication sharedApplication]delegate];

我有一个项目,在这个项目中,我使用来自多个web服务的数据,然后将它们存储在核心数据中的不同实体中。准确地说,有4个不同的实体。其中3个储存得很好。第四个存储在核心数据中,我可以稍后在其他视图中检索它,但如果我关闭应用程序并打开它,则InventoryImage实体似乎为空

- (void)viewDidLoad {
    [super viewDidLoad];
    id delegate = [[UIApplication sharedApplication]delegate];
    self.managedObjectContext = [delegate managedObjectContext];

    _isConnected = TRUE;

    [self checkOnlineConnection];
    DealerModel *dealer = [[DealerModel alloc]init];
    [dealer getDealerNumber];
    _dealerNumber = dealer.dealerNumber;
    //_dealerNumber = @"000310";
    if (_isConnected == TRUE) {
        [self downloadInventoryData:_dealerNumber];
        [self downloadImages:_dealerNumber];
    }
    else{
        [self loadInventory];
        [self loadImages];
    }
}

 - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
/*表数据*/

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_modelsArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    InventoryCell *cell = (InventoryCell *)[tableView dequeueReusableCellWithIdentifier:[_inventoryCell reuseIdentifier]];

    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"InventoryCell" owner:self options:nil];
        cell = _inventoryCell;
        _inventoryCell = nil;
    }

    InventoryHome *currentHome = [_modelsArray objectAtIndex:indexPath.row];

    NSNumber *imageCount = [self loadImagesBySerialNumber:currentHome.serialNumber];

    cell.lblModelDescription.text = currentHome.homeDesc;
    cell.lblSerialNumber.text = currentHome.serialNumber;
    cell.lblImageCount.text = [NSString stringWithFormat:@"Images: %@", imageCount];

    return cell;
}
/*结束表数据*/

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [_modelsArray count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    InventoryCell *cell = (InventoryCell *)[tableView dequeueReusableCellWithIdentifier:[_inventoryCell reuseIdentifier]];

    if (cell == nil) {
        [[NSBundle mainBundle] loadNibNamed:@"InventoryCell" owner:self options:nil];
        cell = _inventoryCell;
        _inventoryCell = nil;
    }

    InventoryHome *currentHome = [_modelsArray objectAtIndex:indexPath.row];

    NSNumber *imageCount = [self loadImagesBySerialNumber:currentHome.serialNumber];

    cell.lblModelDescription.text = currentHome.homeDesc;
    cell.lblSerialNumber.text = currentHome.serialNumber;
    cell.lblImageCount.text = [NSString stringWithFormat:@"Images: %@", imageCount];

    return cell;
}
/*开始下载*/

 #pragma mark - Inventory and Image Data

- (void)downloadInventoryData:(NSString *)dealerNumber
{
    [self loadInventory];

    if (_isConnected == 1 && [_modelsArray count] > 0) {
        [self clearModelEntity:@"InventoryHome"];
    }

    NSString *urlString = [NSString stringWithFormat:@"%@%@", webServiceInventoryListURL, dealerNumber];
    NSURL *invURL = [NSURL URLWithString:urlString];
    NSData *data = [NSData dataWithContentsOfURL:invURL];

    NSLog(@"Inventory Web Service URL: %@", invURL);

    // Sticks all of the jSON data inside of a dictionary
    _jSON = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    // Creates a dictionary that goes inside the first data object eg. {data:[
    _dataDictionary = [_jSON objectForKey:@"data"];

    // Check for other dictionaries inside of the dataDictionary
    for (NSDictionary *modelDictionary in _dataDictionary) {

        InventoryHome *home = [NSEntityDescription insertNewObjectForEntityForName:@"InventoryHome" inManagedObjectContext:[self managedObjectContext]];
        NSString *trimmedSerialNumber = [NSString stringWithFormat:@"%@",[NSLocalizedString([modelDictionary objectForKey:@"serialnumber"], nil) stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

        home.homeDesc = NSLocalizedString([modelDictionary objectForKey:@"description"], nil);
        home.serialNumber = trimmedSerialNumber;
        home.brandDesc = NSLocalizedString([modelDictionary objectForKey:@"branddescription"], nil);
        home.beds = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"numberofbedrooms"], nil) intValue]];
        home.baths = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"numberofbathrooms"], nil) intValue]];
        home.sqFt = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"squarefeet"], nil) intValue]];
        home.length = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"length"], nil) intValue]];
        home.width = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"width"], nil) intValue]];
    }
    [self loadInventory];
}

- (void)downloadImages:(NSString *)dealerNumber
{
    [self loadImages];

    if (_isConnected == 1 && [_imagesArray count] > 0) {
        [self clearModelEntity:@"InventoryImage"];
    }

    NSString *stringImageURL = [NSString stringWithFormat:@"%@%@",inventoryImageURL, dealerNumber];
    NSURL *url = [NSURL URLWithString:stringImageURL];
    NSData *imageData = [NSData dataWithContentsOfURL:url];

    _jSON = [NSJSONSerialization JSONObjectWithData:imageData options:kNilOptions error:nil];
    _dataDictionary = [_jSON objectForKey:@"data"];

    for (NSDictionary *imageDictionary in _dataDictionary) {
        InventoryImage *image = [NSEntityDescription insertNewObjectForEntityForName:@"InventoryImage" inManagedObjectContext:[self managedObjectContext]];
        NSString *trimmedSerialNumber = [NSString stringWithFormat:@"%@",[NSLocalizedString([imageDictionary objectForKey:@"serialnumber"], nil) stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

        image.assetID = NSLocalizedString([imageDictionary objectForKey:@"aid"], nil);
        image.sourceURL = NSLocalizedString([imageDictionary objectForKey:@"imagereference"], nil);
        image.serialNumber = trimmedSerialNumber;
        image.group = NSLocalizedString([imageDictionary objectForKey:@"imagegroup"], nil);
        image.imageTagId = [NSString stringWithFormat:@"%@", [imageDictionary objectForKey:@"searchtagid"]];
        image.imagesId = [NSString stringWithFormat:@"%@", [imageDictionary objectForKey:@"imagesid"]];
        image.imageCaption = NSLocalizedString([imageDictionary objectForKey:@"imagecaption"], nil);
        image.imageSource = NSLocalizedString([imageDictionary objectForKey:@"imagesource"], nil);
        image.inventoryPackageID = NSLocalizedString([imageDictionary objectForKey:@"inventorypackageid"], nil);
    }
}
/*结束下载*/

 #pragma mark - Inventory and Image Data

- (void)downloadInventoryData:(NSString *)dealerNumber
{
    [self loadInventory];

    if (_isConnected == 1 && [_modelsArray count] > 0) {
        [self clearModelEntity:@"InventoryHome"];
    }

    NSString *urlString = [NSString stringWithFormat:@"%@%@", webServiceInventoryListURL, dealerNumber];
    NSURL *invURL = [NSURL URLWithString:urlString];
    NSData *data = [NSData dataWithContentsOfURL:invURL];

    NSLog(@"Inventory Web Service URL: %@", invURL);

    // Sticks all of the jSON data inside of a dictionary
    _jSON = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    // Creates a dictionary that goes inside the first data object eg. {data:[
    _dataDictionary = [_jSON objectForKey:@"data"];

    // Check for other dictionaries inside of the dataDictionary
    for (NSDictionary *modelDictionary in _dataDictionary) {

        InventoryHome *home = [NSEntityDescription insertNewObjectForEntityForName:@"InventoryHome" inManagedObjectContext:[self managedObjectContext]];
        NSString *trimmedSerialNumber = [NSString stringWithFormat:@"%@",[NSLocalizedString([modelDictionary objectForKey:@"serialnumber"], nil) stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

        home.homeDesc = NSLocalizedString([modelDictionary objectForKey:@"description"], nil);
        home.serialNumber = trimmedSerialNumber;
        home.brandDesc = NSLocalizedString([modelDictionary objectForKey:@"branddescription"], nil);
        home.beds = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"numberofbedrooms"], nil) intValue]];
        home.baths = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"numberofbathrooms"], nil) intValue]];
        home.sqFt = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"squarefeet"], nil) intValue]];
        home.length = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"length"], nil) intValue]];
        home.width = [NSNumber numberWithInt:[NSLocalizedString([modelDictionary objectForKey:@"width"], nil) intValue]];
    }
    [self loadInventory];
}

- (void)downloadImages:(NSString *)dealerNumber
{
    [self loadImages];

    if (_isConnected == 1 && [_imagesArray count] > 0) {
        [self clearModelEntity:@"InventoryImage"];
    }

    NSString *stringImageURL = [NSString stringWithFormat:@"%@%@",inventoryImageURL, dealerNumber];
    NSURL *url = [NSURL URLWithString:stringImageURL];
    NSData *imageData = [NSData dataWithContentsOfURL:url];

    _jSON = [NSJSONSerialization JSONObjectWithData:imageData options:kNilOptions error:nil];
    _dataDictionary = [_jSON objectForKey:@"data"];

    for (NSDictionary *imageDictionary in _dataDictionary) {
        InventoryImage *image = [NSEntityDescription insertNewObjectForEntityForName:@"InventoryImage" inManagedObjectContext:[self managedObjectContext]];
        NSString *trimmedSerialNumber = [NSString stringWithFormat:@"%@",[NSLocalizedString([imageDictionary objectForKey:@"serialnumber"], nil) stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];

        image.assetID = NSLocalizedString([imageDictionary objectForKey:@"aid"], nil);
        image.sourceURL = NSLocalizedString([imageDictionary objectForKey:@"imagereference"], nil);
        image.serialNumber = trimmedSerialNumber;
        image.group = NSLocalizedString([imageDictionary objectForKey:@"imagegroup"], nil);
        image.imageTagId = [NSString stringWithFormat:@"%@", [imageDictionary objectForKey:@"searchtagid"]];
        image.imagesId = [NSString stringWithFormat:@"%@", [imageDictionary objectForKey:@"imagesid"]];
        image.imageCaption = NSLocalizedString([imageDictionary objectForKey:@"imagecaption"], nil);
        image.imageSource = NSLocalizedString([imageDictionary objectForKey:@"imagesource"], nil);
        image.inventoryPackageID = NSLocalizedString([imageDictionary objectForKey:@"inventorypackageid"], nil);
    }
}
/*从核心数据加载资源清册和映像*/

- (void)loadInventory
{
    _fetchRequest = [[NSFetchRequest alloc]init];
    _entity = [NSEntityDescription entityForName:@"InventoryHome" inManagedObjectContext:[self managedObjectContext]];
    _sort = [NSSortDescriptor sortDescriptorWithKey:@"homeDesc" ascending:YES];
    _sortDescriptors = [[NSArray alloc]initWithObjects:_sort, nil];

    [_fetchRequest setSortDescriptors:_sortDescriptors];
    [_fetchRequest setEntity:_entity];

    NSError *error = nil;

    _modelsArray = [[self managedObjectContext] executeFetchRequest:_fetchRequest error:&error];

    if (![[self managedObjectContext]save:&error]) {
        NSLog(@"An error has occurred: %@", error);
    }

    [self.inventoryListTable reloadData];
}

- (NSNumber *)loadImagesBySerialNumber: (NSString *)serialNumber
{
    _imagesFetchRequest = [[NSFetchRequest alloc]init];
    _imagesEntity = [NSEntityDescription entityForName:@"InventoryImage" inManagedObjectContext:[self managedObjectContext]];
    _imagesPredicate = [NSPredicate predicateWithFormat:@"serialNumber = %@ && group <> 'm-FLP' && imageSource <> 'MDL'", serialNumber];

    [_imagesFetchRequest setEntity:_imagesEntity];
    [_imagesFetchRequest setPredicate:_imagesPredicate];

    NSError *error = nil;
    _imagesArray = [[self managedObjectContext] executeFetchRequest:_imagesFetchRequest error:&error];

    NSNumber *imageCount = [NSNumber numberWithInteger:[_imagesArray count]];

    return imageCount;
}

- (void)loadImages
{
    _imagesFetchRequest = [[NSFetchRequest alloc]init];
    _imagesEntity = [NSEntityDescription entityForName:@"InventoryImage" inManagedObjectContext:[self managedObjectContext]];

    [_imagesFetchRequest setEntity:_imagesEntity];

    NSError *error = nil;

    _imagesArray = [[self managedObjectContext] executeFetchRequest:_imagesFetchRequest error:&error];
}

别忘了调用
[save:conetext]
。如果关闭而不保存,您将丢失数据。

XCode给我一个错误,说使用未声明的标识符“save”@bnjmn.myers,我想您会在应用程序代理中找到此方法。我刚告诉过你叫这个方法。在你的应用程序中找到这个方法并调用itOkay它实际上是[context save:nil];零可以换成一个很糟糕的N错误。谢谢。@bnjmn.myers不客气:)别忘了标记我的答案