斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #8
来源:互联网 发布:sql trigger insert 编辑:程序博客网 时间:2024/05/21 12:51
这篇文章是针对斯坦福iOS7 2013-1014的公开课Assignment 6 Top Regions所进行的解答的第八部分。
4.All of your table views everywhere in your application (including the Recents tab) must be driven by Core Data (i.e. not NSUserDefaults nor Flickr dictionaries). You no longer have to support “pulling down to refresh” (though see Extra Credit 1).
本节主要是完成Recents表的显示。
创建Recent的category名为Photo,并在public api中定义一个方法:
+ (Recent *)recentPhoto:(Photo *)photo;
当调用这个方法时,检查这个图片是否已经添加过了。如果是的话,更新时间戳就OK了;否则,设置新的图片和时间戳。并且我们查询图片是否超过20张,如果超过那么删掉最后一张。
#define RECENT_PHOTOS_MAX_NUMBER 20+(Recent *)recentPhoto:(Photo *)photo{ Recent *recent = nil; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Recent"]; request.predicate = [NSPredicate predicateWithFormat:@"photo = %@", photo]; NSError *error = nil; NSArray *matches = [photo.managedObjectContext executeFetchRequest:request error:&error]; if (!matches || ([matches count] > 1)) { // handle error } else if (![matches count]) { recent = [NSEntityDescription insertNewObjectForEntityForName:@"Recent" inManagedObjectContext:photo.managedObjectContext]; recent.photo = photo; recent.lastViewed = [NSDate date]; request.predicate = nil; request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"lastViewed" ascending:NO]]; matches = [photo.managedObjectContext executeFetchRequest:request error:&error]; if ([matches count] > RECENT_PHOTOS_MAX_NUMBER) { [photo.managedObjectContext deleteObject:[matches lastObject]]; } } else { recent = [matches lastObject]; recent.lastViewed = [NSDate date]; } return recent;}
当我们在RegionPhotosTVC中segue查看图片时,我们更新数据库的Recent实体,所以我们需要把这个方法公开,在PhotosTVC.h中(注意我们改变通用类)添加:
- (void)prepareViewController:(id)vc forSegue:(NSString *)segueIdentifier fromIndexPath:(NSIndexPath *)indexPath;
然后在RegionPhotosTVC中重写上面的方法
- (void)prepareViewController:(id)vc forSegue:(NSString *)segueIdentifier fromIndexPath:(NSIndexPath *)indexPath{ Photo *photo = [self.fetchedResultsController objectAtIndexPath:indexPath]; [Recent recentPhoto:photo]; [super prepareViewController:vc forSegue:segueIdentifier fromIndexPath:indexPath];}最后,和其他的一样我们需要设置fetchedResultsController
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;...- (void)awakeFromNib{ [super awakeFromNib]; [[NSNotificationCenter defaultCenter] addObserverForName:PhotoDatabaseAvailabilityNotification object:nil queue:nil usingBlock:^(NSNotification *note) { self.managedObjectContext = note.userInfo[PhotoDatabaseAvailabilityContext]; }];} - (void)setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext{ _managedObjectContext = managedObjectContext; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Photo"]; request.predicate = [NSPredicate predicateWithFormat:@"recent != nil"]; request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"recent.lastViewed" ascending:NO]]; self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];}
好了,运行一下吧!
至此,我们已经把Required Task中除了最后一个Task11(iPad版本我们没做)和没有显示thumbnail(Task 8),已经全部完成了。以上的代码我已经传到csdn上了,之所以没有早贴出来,是希望自己敲出来!
http://download.csdn.net/detail/asdfg13697116596/9147497
后面,我会继续更新如何完成Extra Credit中的一些要求。
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #8
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #6
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #1
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #2
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #3
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #4
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #5
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #7
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #9
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #10
- coursera斯坦福Andrew Ng的机器学习编程作业答案
- 悲剧的斯坦福算法入门Assignment 1……fin.eof 函数详解
- 一种iOS7 设置隐藏状态栏的方法
- ios7,8上, TableViewCell里面的内容不显示的 一种情况
- iOS7的一些总结:使用UIView的一种有效方法
- iOS7的一些总结:使用UIView的一种有效方法
- iOS7的一些总结:使用UIView的一种有效方法
- Assignment 8
- 2015 ACM/ICPC 合肥赛区网络赛——吐槽向
- Python魔法方法指南
- 校门外的树
- hdu 5500 Reorder the Books
- 黑马程序员-java基础(四)-面向对象(封装、继承、多态)
- 斯坦福iOS7 2013-2014秋Assignment 6的一种答案 #8
- BufferReader 的使用
- 浅谈HTTP中Get与Post的区别
- 各大公司2016在线笔试(一)
- 最长公共子序列
- MAC电脑DNS劫持解决方法
- nginx文件类型错误解析漏洞
- ubuntu完美搭建git服务器-完善版
- 主窗口(key window)