在我的iPhone应用程序中保存并加载按钮的图像

时间:2013-05-10 18:36:22

标签: iphone ios objective-c cocoa-touch

好的,所以我想让用户从iphone照片中选择一张图像并将该图像保存为按钮上的图像。 当用户关闭应用程序并再次打开它时,我希望用户再次看到他保存的图像:) theButton包含点击按钮的发件人btw。

我可以做用户可以将图像作为按钮图像的部分。 我用这一行来设置图像

[theButton setImage:btnImage forState:UIControlStateNormal];

现在我想知道如何访问该按钮的图像?所以我可以保存并加载它吗?

我根据教程使用此代码,但我坚持使用加载部分,因为显然我不必使用Imageview,因为它只是可读:) 我的代码:

//SAVE
-(NSString *)pathOfFile{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsFolder = [paths objectAtIndex:0];
    return [documentsFolder stringByAppendingFormat:@"myfile.plist"];
}

-(void)applicationWillTerminate:(NSNotification*)notification{
    NSMutableArray *array = [[NSMutableArray alloc]init];
    [array addObject: tileOne.imageView];
    [array addObject: tileTwo.imageView];
    [array writeToFile:[self pathOfFile] atomically:YES];
}

//LOAD
- (void)viewDidLoad
{
    NSString *filePath = [self pathOfFile];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSArray *array = [[NSArray alloc]initWithContentsOfFile:filePath];
        //Here it says read only, what to use then?
        tileOne.imageView = [array objectAtIndex:0];

    }

    UIApplication *app = [UIApplication sharedApplication];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillTerminate:) name:UIApplicationWillTerminateNotification object:app];

    [super viewDidLoad];

}

2 个答案:

答案 0 :(得分:1)

tileOne是什么类型的对象?如果是UIButton,你回答了自己的问题,只需这样做:

[tileOne setImage:[array objectAtIndex:0] forState:UIControlStateNormal];

答案 1 :(得分:0)

您还可以查看NSCoding。鉴于您的头文件中有UIImage *image;或其他内容,我猜您可以使用类似

的内容
-(void)saveImage
{
    NSString *filePath =[documentsFolder stringByAppendingPathComponent:@"file.x";
    NSMutableData *dataToSave = [NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:dataToSave];
    [archiver encodeObject:image forKey:@"theImage"]; //if 'image' is I.E an UIImage
    [archiver finishEncoding];
    [dataToSave writeToFile filePath options:NSDataWritingAtomic error:&error];//do some additional error-stuff
}
-(void)openImage
{
    NSString *filePath =[documentsFolder stringByAppendingPathComponent:@"file.x";
    if([[NSFileManager defaultManager] fileExistsAtPath])
    {
        NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];
        NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initWithReadingWithData:data];
        image = [unarchiver decodeObjectForKey:@"theImage"];
        [unarchiver finishDecoding];
    }
    else
    {
        //No images was previously saved, do something else, image = nil
    }
}