/ Published in: iPhone
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
在我们分æžäº†ç¨‹åºä¸»ä»£ç†æ–‡ä»¶ï¼ˆAppDelegate)之åŽï¼Œæˆ‘们先æ¥çœ‹çœ‹ä¸€å¯¹è‡ªåŠ¨ç”Ÿæˆçš„文件Event.h/.m @end #import "Event.h" @implementation Event @dynamic creationDate; @dynamic latitude; @dynamic longitude; @end 从上é¢æˆ‘们能看出æ¥ï¼Œä¸€ä¸ªå®žä½“Event也就会被生æˆä¸€ä¸ªNSManagedObject(被管ç†å¯¹è±¡ï¼‰ï¼Œç„¶åŽä»»ä½•accessorå’Œgetter 都是被动æ€ç”Ÿæˆçš„,我们其实完全ä¸ç”¨æ“任何的心,åªéœ€è¦åœ¨xcdatamodel文件里é¢é…ç½®åŽï¼Œç‚¹å‡»æ·»åŠ æ–‡ä»¶ï¼Œæ·»åŠ NSManagedObject文件,就会看到自动感知的类对象,然åŽç”Ÿæˆå°±å¯ä»¥äº†ã€‚ 下é¢æ˜¯æ ¹è§†å›¾æŽ§åˆ¶å™¨ï¼Œæ˜¯ä¸€ä¸ªåˆ—表视图(UITableViewController) #import <CoreLocation/CoreLocation.h> @interface RootViewController : UITableViewController <CLLocationManagerDelegate> { //看到是UITableViewControllerçš„å类,由于需è¦ä½¿ç”¨Core Location, //所以在åŽé¢å±¥è¡Œå…¶protocal NSMutableArray *eventsArray; NSManagedObjectContext *managedObjectContext; //这个被管ç†å¯¹è±¡å†…容器就是我们真æ£å¯¹Core Dataæ•°æ®çš„æ“作对象 CLLocationManager *locationManager; //用æ¥å¾—到地ç†ä½ç½®çš„Core Location对象 UIBarButtonItem *addButton; //å³ä¸Šè§’çš„æ·»åŠ é”® } @property (nonatomic, retain) CLLocationManager *locationManager; @property (nonatomic, retain) UIBarButtonItem *addButton; - (void)addEvent; @end #import "RootViewController.h" #import "LocationsAppDelegate.h" #import "Event.h" @implementation RootViewController @synthesize eventsArray, managedObjectContext, addButton, locationManager; - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Locations"; //è®¾ç½®åˆ—è¡¨è§†å›¾çš„æ ‡é¢˜ self.navigationItem.leftBarButtonItem = self.editButtonItem; //导航æ 左边的编辑按钮 addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addEvent)]; //åˆå§‹åŒ–æ·»åŠ æŒ‰é’®ï¼Œ addButton.enabled = NO; //在Core Locationåˆå§‹åŒ–之å‰å°†å…¶å…³é— self.navigationItem.rightBarButtonItem = addButton; //æŠŠè¿™ä¸ªæ·»åŠ æŒ‰é’®æ·»åŠ åˆ°å¯¼èˆªæ å³ä¾§ // å¯åŠ¨CLocation [[self locationManager] startUpdatingLocation]; //åˆå§‹åŒ–一个“获å–请求â€åˆ°æˆ‘们的实体“Event†inManagedObjectContext:managedObjectContext]; [request setEntity:entity]; // 将时间以建立时间排åºï¼Œæœ€æ–°çš„在最上 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO]; [request setSortDescriptors:sortDescriptors]; [sortDescriptor release]; [sortDescriptors release]; // 执行“获å–â€æ“作,得到一个“å¯å˜æ•°ç»„â€çš„æ‹·è´ executeFetchRequest:request error:&error] mutableCopy]; if (mutableFetchResults == nil) { //如果结果为空,在这作错误å“应 } // 将得到的本地数组赋值到本类的全局数组,然åŽæ¸…ç†æ— 用的对象 [self setEventsArray:mutableFetchResults]; [mutableFetchResults release]; [request release]; } - (void)viewDidUnload { // 当视图被å¸è½½åŽï¼Œå°†ä»¥ä¸‹æŒ‡é’ˆç½®ç©º self.eventsArray = nil; self.locationManager = nil; self.addButton = nil; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { // åªæœ‰ä¸€ä¸ªç« 节 return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { // 在数组里é¢æœ‰å¤šå°‘个对象,在列表视图就有多少行 return [eventsArray count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // ä¸€ä¸ªâ€œæ—¥æœŸæ ¼å¼åŒ–器â€ï¼ˆå‡‘åˆæ˜Žç™½å°±å¥½...)用æ¥ä»¥ç‰¹å®šçš„æ ¼å¼åˆ›å»ºå¾—到的日期 if (dateFormatter == nil) { [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; } if (numberFormatter == nil) { [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; [numberFormatter setMaximumFractionDigits:3]; } UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease]; UITableViewCellStyleSubtitle; } // 从数组ä¸å¾—到这个Event对象 Event *event = (Event *)[eventsArray objectAtIndex:indexPath.row]; cell.textLabel.text = [dateFormatter stringFromDate:[event creationDate]]; [numberFormatter stringFromNumber:[event latitude]], [numberFormatter stringFromNumber:[event longitude]]]; cell.detailTextLabel.text = string; return cell; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle { if (editingStyle == UITableViewCellEditingStyleDelete) { // åˆ é™¤è¢«æƒ¯ä¾‹å¯¹è±¡åœ¨ç´¢å¼•è·¯å¾„ï¼ˆindex path) [managedObjectContext deleteObject:eventToDelete]; // 更新数组和列表视图 [eventsArray removeObjectAtIndex:indexPath.row]; // æ交更改到Core Data NSError *error; if (![managedObjectContext save:&error]) { // Handle the error. } } } - (void)addEvent { //如果得ä¸åˆ°ä½ç½®ï¼Œå°±è¿”回. CLLocation *location = [locationManager location]; if (!location) { return; } //建立一个Event实体对象 insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext]; //得到ç»çº¬åº¦ï¼Œç„¶åŽèµ‹å€¼åˆ°event对象去 CLLocationCoordinate2D coordinate = [location coordinate]; // 实例里é¢å¹¶æ²¡æœ‰ä½¿ç”¨CLçš„æ—¶é—´æ ‡ç¾ï¼Œå› 为在模拟器ä¸ä¼šæ˜¯ä¸€æ ·çš„ // [event setCreationDate:[location timestamp]]; //所以现在使用的是现在的时间,而ä¸æ˜¯å¾—到ä½ç½®çš„时候的时间 // ä¿å˜æ›´æ”¹ NSError *error; if (![managedObjectContext save:&error]) { // Handle the error. } // 将新Event放到最上é¢ï¼Œæ‰€ä»¥æ·»åŠ 到0çš„ä½ç½® // 然åŽæ»šåŠ¨åˆ—表视图到最上é¢ï¼Œå¦‚果没有那么多的数æ®æ˜¯çœ‹ä¸å‡ºæ¥åŒºåˆ«çš„ [eventsArray insertObject:event atIndex:0]; withRowAnimation:UITableViewRowAnimationFade]; atScrollPosition:UITableViewScrollPositionTop animated:YES]; } - (CLLocationManager *)locationManager { //自定义的CLocationçš„getter,方便åˆå§‹åŒ– if (locationManager != nil) { return locationManager; } //åˆå§‹åŒ–CL对象,然åŽè®¾ç½®ç²¾å‡†åº¦ï¼Œç„¶åŽå°†ä»£ç†å¯¹è±¡è®¾ä¸ºæœ¬åœ° locationManager = [[CLLocationManager alloc] init]; [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters]; [locationManager setDelegate:self]; return locationManager; } //CLocation的一个代ç†æ–¹æ³•ï¼Œå¦‚æžœæˆåŠŸå°±å¼€å¯å³ä¾§æ·»åŠ 按钮 - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { addButton.enabled = YES; } //CLocation的一个代ç†æ–¹æ³•ï¼Œå¦‚果失败了就关é—(disable)å³ä¾§æ·»åŠ 按钮 - (void)locationManager:(CLLocationManager *)manager addButton.enabled = NO; } - (void)dealloc { //释放对象 [managedObjectContext release]; [eventsArray release]; [locationManager release]; [addButton release]; [super dealloc]; } @end 从上é¢çš„æºä»£ç ,我们å¯ä»¥çœ‹å‡ºï¼Œ 1,在这里数æ®å¹¶ä¸æ˜¯æ¯æ¬¡éƒ½ç”±NSManagedContext对象得到,而是由一个数组得出。 2,数组是一个å¯å˜æ•°ç»„,由第一次载入的视图的时候从NSManagedContextä¸å¾—到 3,从NSManagedContext对象ä¸å¾—到数æ®éœ€è¦ä½¿ç”¨NSFetchRequestæ¥åˆå§‹åŒ–一个“获å–†4,æ¯æ¬¡èŽ·å¾—æ–°çš„æ•°æ®çš„时候,åŒæ—¶ä¿å˜åˆ°æ•°ç»„å’ŒNSManagedContextä¸ï¼Œæ·»åŠ åŽéœ€è¦å¯¹æ›´æ”¹è¿›è¡Œæ交
URL: http://c.gzl.name/archives/412