0

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

4

2 に答える 2

1

に値を設定した後NSUserDefaults、次の行を書くだけです:

[[NSUserDefaults standardUserDefaults] synchronize];

これがお役に立てば幸いです。

于 2012-06-20T07:17:15.357 に答える
0

使ってみましたか

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

それ以外の

[self performSelector: @selector(saveIdea)  withObject:nil afterDelay:0.1];
于 2012-06-20T08:00:09.873 に答える