これが私のアプリの流れです。画像のサムネイルを含む UICollectionview があります。ユーザーは画像を選択し、[保存] ボタンをタップします。画像はカメラロールに保存されます。
これが私がやりたいことです:サブビューを使用して、ユーザーが既にタップして保存したセルをマークしたいと思います。どうすればそれを達成できますか?
これは私がすでに行ったことです....私のアプローチ:明らかに何かが欠けていて、解決できません。
ユーザーが保存ボタンをタップすると、これらの画像の ID がコア データを使用してローカル ストアに正常に保存されます。次に、そのエンティティからオブジェクトを取得し、それらのオブジェクトを配列に配置します。今、取得した配列の画像 ID をコレクション ビューの画像 ID と比較しようとしているので、ID が一致するセルにのみサブビューを追加できます。それが正しいアプローチかどうかはわかりません。
私の愚かな試み:
このメソッドは、ユーザーが [保存] ボタンをタップすると呼び出されますが、正しく機能しません。サブビューをランダムに追加しているように感じます。
-(void)markSavedImages
{
BOOL isMarked;
NSArray *savedImages = [self fetchSavedPhotos];
NSEnumerator *enumerator = [savedImages objectEnumerator];
NSString *savedImage;
while (savedImage = [enumerator nextObject]) {
if ([[self.eventPhotos valueForKey:@"id"] containsObject:savedImage]) {
isMarked = YES;
}
else
{
isMarked = NO;
}
}
CVCell *cell = [[CVCell alloc]init];
for (NSIndexPath *indexPath in self.livePhotosCollectionView.indexPathsForVisibleItems) {
if (isMarked) {
cell = (CVCell*)[self.livePhotosCollectionView cellForItemAtIndexPath:indexPath];
UIImageView *markedImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"markedCVCell.png"]];
[cell addSubview:markedImage];
[cell bringSubviewToFront:markedImage];
cell.userInteractionEnabled = NO;
}
}
}
はself.eventPhotos
、イメージの ID とサーバーへのパスを含む配列です。
みんな助けてください、私はこれで自分を殺していて、グーグルで何も見つかりませんでした。
編集- リクエストに応じて
-(NSArray*)fetchSavedPhotos
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Photos" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"eventID ==[c] %@", _eventID];
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"No rows returned");
}
NSArray *savedImages = [fetchedObjects valueForKey:@"imageID"];
return savedImages;
}
いくつかの詳細情報....markSavedImagesメソッドでsavedImages配列を出力すると、取得したい配列を取得できます。このようなもの: (1324,2353,2324). 基本的にはイメージ ID の配列。