Core data 如何将用户选择的图像(Zbar扫描仪)保存在“应用程序文档”文件夹中

Core data 如何将用户选择的图像(Zbar扫描仪)保存在“应用程序文档”文件夹中,core-data,uiimageview,nsfilemanager,xcode4.6,nsdocumentdirectory,Core Data,Uiimageview,Nsfilemanager,Xcode4.6,Nsdocumentdirectory,我有两个视图,其中一个是UITableVew,用户可以通过添加它们来填充单元格。第二个视图是他们添加的信息(姓名、日期、公司和扫描条形码的地点)。当他们扫描图像时,他们可以看到他们扫描的图像(使用Zbar条形码扫描仪完成)。因此,主要的问题是,我如何才能在用户添加的每个不同单元格中准确地保存不同的图像 代码: 兹巴: - (IBAction)cameraButtonTapped:(id)sender { // Check for camera if ([UIIma

我有两个视图,其中一个是UITableVew,用户可以通过添加它们来填充单元格。第二个视图是他们添加的信息(姓名、日期、公司和扫描条形码的地点)。当他们扫描图像时,他们可以看到他们扫描的图像(使用Zbar条形码扫描仪完成)。因此,主要的问题是,我如何才能在用户添加的每个不同单元格中准确地保存不同的图像

代码:

兹巴:

    - (IBAction)cameraButtonTapped:(id)sender
    {
    // Check for camera
    if ([UIImagePickerController               isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) {
        // Create image picker controller
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

        // Set source to the camera
        imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;

        // Delegate is self
        imagePicker.delegate = self;

        // Show image picker
        [self presentModalViewController:imagePicker animated:YES];
    }

    }


    - (void) imagePickerController: (UIImagePickerController*)reader
    didFinishPickingMediaWithInfo: (NSDictionary*) info
    {
    // ADD: get the decode results
    id<NSFastEnumeration> results =
    [info objectForKey: ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results)
        // EXAMPLE: just grab the first barcode
        break;

    // EXAMPLE: do something useful with the barcode data
    resultText.text = symbol.data;

    // EXAMPLE: do something useful with the barcode image
    resultImage.image =
    [info objectForKey: UIImagePickerControllerOriginalImage];

    // ADD: dismiss the controller (NB dismiss from the *reader*!)

    [reader dismissModalViewControllerAnimated:YES];

    }

    -(UIView*)CommomOverlay{
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];

    UIImageView *TopBar = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,58)];
    [TopBar setImage:[UIImage imageNamed:@""]];
    [view addSubview:TopBar];

    UILabel *Toplabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 9, 300, 30)];
    [Toplabel setFont:[UIFont fontWithName:@"Heiti TC light" size:22]];
    [Toplabel setTextAlignment:UITextAlignmentCenter];
    [Toplabel setBackgroundColor:[UIColor clearColor]];
    [Toplabel setTextColor:[UIColor lightGrayColor]];
    [Toplabel setNumberOfLines:1];
    [Toplabel setText:@"Turn your device sideways to scan"];
    [TopBar addSubview:Toplabel];

    UIImageView *FrameImg = [[UIImageView alloc] initWithFrame:CGRectMake(40,50,240,370)];
    [FrameImg setImage:[UIImage imageNamed:@"scanImage.png"]];
    [view addSubview:FrameImg];
    return view;
}



- (IBAction) scanButtonTapped
{
    // ADD: present a barcode reader that scans from the camera feed
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;
    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

    ZBarImageScanner *scanner = reader.scanner;
    // TODO: (optional) additional reader configuration here

    // EXAMPLE: disable rarely used I2/5 to improve performance
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];

    // present and release the controller
    reader.cameraOverlayView = [self CommomOverlay];

    [self presentModalViewController: reader
                            animated: YES];

}

如果您已经在使用Core Data,则根据图像的大小,您可以将其转换为NSData并直接保存在Core Data中(如果较小),也可以将其保存在documents目录中并将文件名保存在Core Data中

因为完整的核心数据教程超出了本文的范围,所以我只想用唯一的名称将图像保存到documents目录。请注意,下面的一些代码是从“”改编的

以下方法检索图像:

- (UIImage *)imageForKey:(NSString *)imgkey {
    result = [UIImage imageWithContentsOfFile:[self imagePathForKey:imgkey thumbnail:FALSE]];
    if (!result) {
        // File not found - add code here as needed (to return default image or whatever)
    }
    return result;
}

请注意,如果计划同时在表中显示多个图像,则必须小心确保图像较小,否则可能会遇到内存问题。在这种情况下,您希望将它们转换为表格视图的缩略图形式,然后仅在详细视图中显示全尺寸图像(如何生成缩略图将是一个单独的问题)。

如果您已经在使用核心数据,然后根据图像的大小,您可以将其转换为NSData并直接保存在Core Data中(如果图像较小),也可以将其保存在documents目录中并将文件名保存在Core Data中

因为完整的核心数据教程超出了本文的范围,所以我只想用唯一的名称将图像保存到documents目录。请注意,下面的一些代码是从“”改编的

以下方法检索图像:

- (UIImage *)imageForKey:(NSString *)imgkey {
    result = [UIImage imageWithContentsOfFile:[self imagePathForKey:imgkey thumbnail:FALSE]];
    if (!result) {
        // File not found - add code here as needed (to return default image or whatever)
    }
    return result;
}

请注意,如果计划同时在表中显示多个图像,则必须小心确保图像较小,否则可能会遇到内存问题。在这种情况下,您可能希望将它们转换为表视图的缩略图形式,然后仅在详细视图中显示全尺寸图像(如何生成缩略图将是一个单独的问题)。

那么我将如何调用此方法来保存它们?我用我的代码发布了一个用于保存的编辑,那么我如何调用此方法来保存它们呢?我发布了一个带有代码的编辑来保存
- (UIImage *)imageForKey:(NSString *)imgkey {
    result = [UIImage imageWithContentsOfFile:[self imagePathForKey:imgkey thumbnail:FALSE]];
    if (!result) {
        // File not found - add code here as needed (to return default image or whatever)
    }
    return result;
}