

iPhoneのカメラロールのお気に入りボタン(ハート型のボタン)のようなものを作りたいと考えています。  
撮った写真がコレクションビューに配置されていて、その一つをタップすると画面が遷移して画面いっぱいでみることができるカメラロールのようなものを作りました。

お気に入りボタンをBOOL値でそれぞれの画像ごとに認識したいのですが、BOOL値をそれぞれの画像ごとに保存する方法がわかりません。

MainViewControllerのセグエで画像の配列を取得してDetailViewControllerでその取得した画像の配列にBOOL値もいれたいのですが、一つのNSMutableArray配列に画像とBOOL値の二つを入れることは可能でしょうか

どなたか何かわかる方がいましたらよろしくお願いします。

**MainViewController.m**

[code]

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
    {
        if ([[segue identifier] isEqualToString:@"showDetailView"])
        {
            NSIndexPath *indexPath = [self.collectionView.indexPathsForSelectedItems objectAtIndex:0];
    
            UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath];
    
            UIImageView *selectedImage = (UIImageView *)[cell viewWithTag:1];
    
            //画面を遷移
            ShowViewController *showViewController = segue.destinationViewController;
    
            showViewController.image2 = selectedImage.image;
    
            showViewController.delegate = self;
    
    
            //どこがタップされたかの指定
    
            // CollectionHeaderViewを特定
            UIView *view = sender;
            while (view && ![view isKindOfClass:[CollectionHeaderView class]]){
                view = view.superview;
            }
            CollectionHeaderView *headerView = (CollectionHeaderView *)view;
    
            //_imageSelectionIndexPathに現在選択されたセクションを指定
            _imageSelectionIndexPath = headerView.indexPath;
    
            //お気に入りボタンの初期値設定
            //ここで表示される画像ごとのBOOL値を取得する
        }
    } 
    
[/code]

**DetailViewController.m**

[code]

    - (void)viewDidLoad
    {
        if (self.favoriteButton) {
            NSLog(@"お気に入りボタンのBOOLがYES");      
        } else {
            NSLog(@"お気に入りボタンのBOOLがNO");        
        }
    }
    
    -(void)tappedFavorite
    {
        //ここでBOOL値を保存
    }
    
[/code]

**Lesson.h**

[code]

    #import <Foundation/Foundation.h>
    #import "Record.h"
    
    @interface Lesson : NSObject <NSCoding>
    
    @property (nonatomic) NSString *name;
    @property (nonatomic) NSString *teacher;
    @property (nonatomic) NSString *room;
    @property (nonatomic) NSMutableArray *records;
    
    + (NSArray *)fetchLessons;
    + (void)saveLessons:(NSArray *)lessons;
    
    @end
    
[/code]

**Lesson.m**

[code]

    #import "Lesson.h"
    
    @implementation Lesson
    
    + (NSArray *)fetchLessons
    {
        NSString *path = [self makeLibraryPath];
    
        NSData *data = [[NSData alloc] initWithContentsOfFile:path];
    
        NSArray *array =[NSKeyedUnarchiver unarchiveObjectWithData:data];
    
        if (!array) {
            array = [NSArray array];
        }
        return array;
    }
    
    
    + (void)saveLessons:(NSArray *)lessons
    {
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:lessons];
    
        NSString *path = [self makeLibraryPath];
    
        if ([data writeToFile:path atomically:YES]) {
            NSLog(@"画像の保存が成功しました");
        } else {
            NSLog(@"画像の保存に失敗しました");
        }   
    }
    
    
    + (NSString *)makeLibraryPath
    {
        NSArray *paths =    NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    
        NSString *dir = [paths objectAtIndex:0];
    
        return [dir stringByAppendingPathComponent:@"data.dat"]; 
    }
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            self.records = [NSMutableArray array];
        }
        return self;
    }
    
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super init];
        if (self){
            self.name = [aDecoder decodeObjectForKey:@"name"];
            self.teacher = [aDecoder decodeObjectForKey:@"teacher"];
            self.room = [aDecoder decodeObjectForKey:@"room"];
            self.records = [aDecoder decodeObjectForKey:@"records"];
    
        //self.favButton = [aDecoder decodeObjectForKey:@"favorite"];
        }
        return self;
    }
    
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        [aCoder encodeObject:self.name forKey:@"name"];
        [aCoder encodeObject:self.teacher forKey:@"teacher"];
        [aCoder encodeObject:self.room forKey:@"room"];
        [aCoder encodeObject:self.records forKey:@"records"];
    }
    
    @end
    
[/code]

**Record.h**

[code]

    #import <Foundation/Foundation.h>
    
    @interface Record : NSObject <NSCoding>
    
    @property (nonatomic) NSDate *date;
    @property (nonatomic) NSMutableArray *images;
    @end
    
[/code]

**Record.m**

[code]

    #import "Record.h"
    
    @implementation Record
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            self.images = [NSMutableArray array];
        }
        return self;
    }
    
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super init];
        if (self){
            self.date = [aDecoder decodeObjectForKey:@"date"];
            self.images = [aDecoder decodeObjectForKey:@"images"];
    
        }
        return self;
    }
    
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        [aCoder encodeObject:self.date forKey:@"date"];
        [aCoder encodeObject:self.images forKey:@"images"];
    }
    
    @end
    
[/code]


CC BY-SA 3.0
2015-08-25T08:47:20.033
14826
2015-12-24T17:17:33.137
2015-08-26T14:25:12.037
5337
8802
question
objective-c xcode iphone
iPhoneのカメラロールのお気に入りボタンのようなものを作りたい


画像に`BOOL`値を保存することは基本できないので、`NSDictionary`で画像名( **Key**
)とお気に入り(`BOOL`)を`NSUserDefaults`で保存し、画像が呼ばれるたびに`NSDictionary`を参照してお気に入りのON/OFFを切り替えれば良いと思います。


CC BY-SA 3.0
2015-08-26T06:20:37.850
14859
2015-08-26T14:09:33.960
2015-08-26T14:09:33.960
5337
356
14826
answer