【问题标题】:Saving and Retrieving Image Makes App Working Slowly保存和检索图像使应用程序运行缓慢
【发布时间】:2012-06-20 07:09:20
【问题描述】:

我这样保存UIImagePicker的图片:

将图片保存在文件中,然后我在 NSUserDefaults 中保存失败的路径,然后在另一个类中我通过这个保存的路径检索图片。

代码:

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{    
    ideaImage.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];

    [picker dismissModalViewControllerAnimated:YES];
}

-(void)saveIdea_alt
{
    [self performSelector: @selector(saveIdea)  withObject:nil afterDelay:0.1];
}
-(void)saveIdea
{
    UIImage *ideaPhoto = ideaImage.image;

    NSData *imageData = UIImagePNGRepresentation(ideaPhoto);

    NSString* imageName = @"MyImage.png";

    NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDirectory = [paths objectAtIndex:0];

    NSString* fullPathToFile = [documentsDirectory stringByAppendingPathComponent:imageName];

    [imageData writeToFile:fullPathToFile atomically:NO];



    NSArray *arrayKeys = [[NSArray alloc]initWithObjects:@"ideaName",@"ideaCost",@"ideaNote", @"ideaImage", nil];
    NSArray *arrayObjects = [[NSArray alloc]initWithObjects:ideaName.text,ideaCost.text,ideaNote.text,fullPathToFile ,  nil];

    NSDictionary *dictionary = [[NSDictionary alloc]initWithObjects:arrayObjects forKeys:arrayKeys];
    NSMutableArray *ideasArray = [[NSMutableArray alloc]initWithArray:[[NSUserDefaults standardUserDefaults]objectForKey:@"ideasArray"]];

    [ideasArray addObject:dictionary];

    [[NSUserDefaults standardUserDefaults]setObject:ideasArray forKey:@"ideasArray"];

    [self dismissModalViewControllerAnimated:YES];
}

但是,在那之后,我的应用程序变慢了,并且保存和加载图像的速度也很慢。我做错了什么?

我真的不想使用 Core Data,因为我已经将想法的所有其他属性保存在 NSUserDefaults 中(例如成本、名称、颜色等)

【问题讨论】:

  • 因为你一次保存一张图片应该没问题

标签: iphone objective-c ios xcode uiimage


【解决方案1】:

NSUserDefaults中设置值后,写下这一行:

[[NSUserDefaults standardUserDefaults] synchronize];

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您是否尝试过使用

    [self performSelectorInBackground: @selector(saveIdea)  withObject:nil];
    

    而不是

    [self performSelector: @selector(saveIdea)  withObject:nil afterDelay:0.1];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      相关资源
      最近更新 更多