ãã¥ãŒããªã¢ã«ã®
æåã®éšåã§ã¯ ãã¹ããŒãªãŒããŒãã䜿çšããŠãã¥ãŒãã«ã¹ã¿ãã€ãºããŸããã 2çªç®ã®æçµããŒãã§ã¯ããããããããã¯èªäœã«å°éããŸããã ãããã¯ãšã¯äœãããããã¯ã®æ§æããããã¯ã®äœ¿çšæ¹æ³ããããŠããããã®äŸã«ã€ããŠã話ããŸãã NSArrayãUIViewã¢ãã¡ãŒã·ã§ã³ãGrand Central Dispatchãªã©ã§ãããã¯ã䜿çšããæ¹æ³ã瀺ããŸãã
ã¯ããã«
ãããã¯ã¯ãã³ãŒããç°¡çŽ åããããã«iOS 4.0ããã³Mac OSX 10.6ã§åããŠå°å
¥ãããŸããã 圌ãã¯ãããæžãããããªã²ãŒãã®äŸåé¢ä¿ãæžããããããã§èªã¿ãããã³ãŒããæžãããšãã§ããŸãã ããããæãããªå©ç¹ã«ãããããããå€ãã®éçºè
ã¯èªåã®è¡åã®åçãå®å
šã«ç解ããŠããªãããããããã¯ã䜿çšããŸããã
ãããã¯ã®ãäœãã©ãããã€ããªãããèŠãŠã¿ãŸãããã
ãããã®ããããã¯ããšã¯äœã§ããããªãéèŠãªã®ã§ããïŒ
å
éšããèŠããšããããã¯ã¯å°æ¥ã®ããæç¹ã§åŒã³åºãããšãã§ããã³ãŒãã§ãã ãããã¯ã¯
ãã¡ãŒã¹ãã¯ã©ã¹ã®é¢æ°ãªã®ã§ããããã¯ã¯éåžžã®Objective-Cãªããžã§ã¯ããšèšããŸãã ãŸãããªããžã§ã¯ãã¯ãã©ã¡ãŒã¿ãšããŠæž¡ãããé¢æ°ãšã¡ãœããããè¿ãããå€æ°ã«å²ãåœãŠãããŸãã PythonãRubyãLispãªã©ã®èšèªã§ã¯ããããã¯ã¯å®£èšåŸãç¶æ
ãã«ãã»ã«åããããããã°ãã°ã¯ããŒãžã£ãŒãšåŒã°ããŸãã ãããã¯ã¯ãåç
§ãããããŒã«ã«å€æ°ã®å®æ°ã³ããŒãäœæããŸãã
åŸã§äœããè¿ãã³ãŒããåŒã³åºãå¿
èŠãããå Žåã¯ããããããããã¯ã§ã¯ãªãããªã²ãŒããŸãã¯NSNotificationCenterã䜿çšããã§ãããã ãããŠãããã¯ããŸãåäœããŸãããã³ãŒãã®æçã¯ã©ãã«ã§ãæ£ãã°ããŸã-ã¿ã¹ã¯ã¯ããç¹ããå§ãŸããçµæã¯å¥ã®ç¹ã«åŠçãããŸãã
ãããã¯ã¯ãã¿ã¹ã¯ã1ã€ã®å Žæã«ä¿æãããããããåªããŠããŸãã
ãããã¯ãå¿
èŠãªã®ã¯èª°ã§ããïŒ
ããªãã®ããã«ïŒ ããããçå£ã«ããããã¯ã¯çã®ããã§ããã誰ãããããã¯ã䜿çšããŠããŸãã ãããã¯ã¯æªæ¥ã§ãã®ã§ãããã«åŠã¶ããšãã§ããŸãã çµã¿èŸŒã¿ãã¬ãŒã ã¯ãŒã¯ã®å€ãã®ã¡ãœããã¯ãæ¢åã®æ©èœã«åºã¥ããŠãããã¯ã«ãã£ãŠæžãæããããããè£è¶³ãããŸãã
ãããã¯ã®äœ¿çšæ¹æ³ã¯ïŒ
ããã¯ããããã¯æ§æããã説æããŠããiOS Developer Libraryã®åçã§ãã
ãããã¯ã®èª¬æã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
return_type (^block_name)(param_type, param_type, ...)
ãã§ã«ä»ã®Cèšèªã§ããã°ã©ãã³ã°ãè¡ã£ãŠããå Žåããã®^èšå·ãé€ããŠããã®æ§é ã¯éåžžã«ããç¥ãããŠããŸãã ^ãããŠãããã¯ãæå³ããŸãã ^ããç§ã¯ãããã¯ããæå³ããããšãç解ããŠããå Žåãããã§ãšãããããŸãããããã¯ã«é¢ããæãé£ããããšãç解ããã ãã§ãã ;]
ãã©ã¡ãŒã¿ã®ååã¯çŸåšå¿
é ã§ã¯ãããŸããããå¿
èŠã«å¿ããŠå«ããããšãã§ããŸãã
以äžã¯ãããã¯å®£èšã®ãµã³ãã«ã§ãã
int (^add)(int,int)
次ã«ããããã¯ã®èª¬æã
^return_type(param_type param_name, param_type param_name, ...) { ... return return_type; }
å®éãããããããã¯ã®äœææ¹æ³ã§ãã ãããã¯ã®èª¬æã¯å®£èšãšã¯ç°ãªãããšã«æ³šæããŠãã ããã ^æåã§å§ãŸããååãä»ããããšãã§ãããããã¯å®£èšã®ãã©ã¡ãŒã¿ãŒã®ã¿ã€ããšé åºã«å¯Ÿå¿ããå¿
èŠããããã©ã¡ãŒã¿ãŒãä»éããŸãã ã³ãŒãèªäœãç¶ããŸãã
ãããã¯ã®å®çŸ©ã§ã¯ãæ»ãå€ã®ã¿ã€ãã¯ãªãã·ã§ã³ã§ãããã³ãŒãããèå¥ã§ããŸãã è€æ°ã®æ»ãå€ãããå Žåããããã¯åãã¿ã€ãã§ãªããã°ãªããŸããã
ãµã³ãã«ãããã¯ã®èª¬æïŒ
^(int number1, int number2){ return number1+number2 }
ãããã¯ã®èª¬æãšå®£èšãçµã¿åããããšã次ã®ã³ãŒããåŸãããŸãã
int (^add)(int,int) = ^(int number1, int number2){ return number1+number2; }
ãã®æ¹æ³ã§ãããã¯ã䜿çšããããšãã§ããŸãïŒ
int resultFromBlock = add(2,2);
次ã«ããããã¯ã䜿çšããªãåãã³ãŒããšã¯å¯Ÿç
§çã«ããããã¯ã䜿çšããããã€ãã®äŸãèŠãŠã¿ãŸãããã
äŸïŒNSArray
ãããã¯ãé
åã§ããã€ãã®æäœãå®è¡ããåçãã©ã®ããã«å€ããããèŠãŠã¿ãŸãããã ãŸããã«ãŒãã®éåžžã®ã³ãŒãã次ã«ç€ºããŸãã
BOOL stop; for (int i = 0 ; i < [theArray count] ; i++) { NSLog(@"The object at index %d is %@",i,[theArray objectAtIndex:i]); if (stop) break; }
åæ¢å€æ°ã®å€ãèšå®ããå¿
èŠã¯ãããŸããã ãã ãããããã¯ã䜿çšããŠãã®ã¡ââãœããã®å®è£
ã確èªãããšããã¹ãŠãæ確ã«ãªããŸãã ãããã¯ã¡ãœããã«ã¯ãstopãå€æ°ãå«ãŸããŠããããã€ã§ãã«ãŒããåæ¢ã§ãããããã³ãŒãã®é¡äŒŒæ§ã®ããã«ãã®æ©èœãåçŽã«è€è£œããŸãã
ããã§ãé«éåæã䜿çšããŠåãã³ãŒããèŠãŠã¿ãŸãããã
BOOL stop; int idx = 0; for (id obj in theArray) { NSLog(@"The object at index %d is %@",idx,obj); if (stop) break; idx++; }
ãããŠä»ããããã¯ã§ïŒ
[theArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){ NSLog(@"The object at index %d is %@",idx,obj); }];
äžèšã®ã³ãŒãã§ã¯ããstopãå€æ°ãäœã§ãããçåã«æããããããŸããã ããã¯ãããã»ã¹ãåæ¢ããããã«ãããã¯å
ã§YESãå²ãåœãŠãããšãã§ããåãªãå€æ°ã§ãã ãã®ãã©ã¡ãŒã¿ãŒã¯ã
enumerateObjectsUsingBlockã¡ãœããã§äœ¿çšããããããã¯ã®äžéšãšããŠå®çŸ©ãããŸãã
äžèšã®ã³ãŒãã¯ç°¡åãªãã®ã§ããããã®äžã®ãããã¯ã®å©ç¹ã確èªããããšã¯éåžžã«å°é£ã§ãã ããããç§ã泚æããã2ã€ã®ããšããããŸãïŒ
- ã·ã³ãã«ã ã ãããã¯ã䜿çšãããšãã³ãŒããèšè¿°ããããšãªãããªããžã§ã¯ããé
åå
ã®ãªããžã§ã¯ãã®ã€ã³ããã¯ã¹ãããã³åæ¢å€æ°ã«ã¢ã¯ã»ã¹ã§ããŸãã ããã«ããã³ãŒããæžå°ãããšã©ãŒã®æ°ãæžå°ããŸãã
- ã¹ããŒã ã ãããã¯æ¹åŒã«ã¯ãé«éåææ¹åŒããããããã«é床ã®å©ç¹ããããŸãã ç§ãã¡ã®å Žåããã®å©ç¹ã¯ããããèšåããã«ã¯å°ããããŸãããããè€éãªå Žåã«ã¯éèŠã«ãªããŸãã
äŸïŒUIViewã¢ãã¡ãŒã·ã§ã³
åäžã®UIViewã§åäœããã·ã³ãã«ãªã¢ãã¡ãŒã·ã§ã³ãèŠãŠã¿ãŸãããã
alphaãã©ã¡ãŒã¿ãŒã0ã«å€æŽãããã¥ãŒãäžäžã«50ãã€ã³ã移åããŠãããã¹ãŒããŒãã¥ãŒããUIViewãåé€ããŸãã ã·ã³ãã«ã§ããïŒ ãããã¯ãªãã®ã³ãŒãïŒ
- (void)removeAnimationView:(id)sender { [animatingView removeFromSuperview]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [UIView beginAnimations:@"Example" context:nil]; [UIView setAnimationDuration:5.0]; [UIView setAnimationDidStopSelector:@selector(removeAnimationView)]; [animatingView setAlpha:0]; [animatingView setCenter:CGPointMake(animatingView.center.x+50.0, animatingView.center.y+50.0)]; [UIView commitAnimations]; }
ãããã¯æ¹æ³ïŒ
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [UIView animateWithDuration:5.0 animations:^{ [animatingView setAlpha:0]; [animatingView setCenter:CGPointMake(animatingView.center.x+50.0, animatingView.center.y+50.0)]; } completion:^(BOOL finished) { [animatingView removeFromSuperview]; }]; }
ãããã®2ã€ã®æ¹æ³ãããèŠããšããããã¯æ¹æ³ã®3ã€ã®å©ç¹ã«æ°ä»ãã§ãããã
- ã³ãŒããç°¡çŽ åããŸã ã ãããã¯ã䜿çšãããšãã³ãŒã«ããã¯ãå®äºããããã«å®å
šã«å¥ã®ã¡ãœãããå®çŸ©ãããã beginAnimations / commitAnimationsãåŒã³åºãããããå¿
èŠããããŸããã
- ãã¹ãŠã®ã³ãŒãã¯1ã€ã®å Žæã«ãããŸãã ãããã¯ã䜿çšãããšãããå Žæã§ã¢ãã¡ãŒã·ã§ã³ãéå§ããå¥ã®å Žæã§ã³ãŒã«ããã¯ã¡ãœãããéå§ããå¿
èŠããããŸããã ã¢ãã¡ãŒã·ã§ã³é¢é£ã®ã³ãŒãã¯ãã¹ãŠ1ãæã«ãããããç°¡åã«èªã¿æžãã§ããŸãã
- ããã§Appleã¯èšã ã Appleã¯ããããã¯ã䜿çšããªãæ¢åã®æ©èœãæžãçŽãããããå¯èœã§ããã°ããããã¯ããŒã¹ã®æ¹æ³ã«åãæ¿ããããšãå
¬åŒã«æšå¥šããŠããŸãã
ãããã¯ã䜿çšããå Žå
æåã®ã¢ããã€ã¹ã¯ãå¿
èŠãªå Žæã§ãããã¯ã䜿çšããããšã ãšæããŸãã ãããããåŸæ¹äºææ§ãç¶æããããã«å€ãã¡ãœããã䜿ãç¶ããããšæããããããŸããããåã«ãããã«æ
£ããŠããããã§ãããã ããããåæ§ã®æ±ºå®ç¹ã«æ¥ããã³ã«ããããã¯ãã³ãŒããæžãã®ã«ããªãã®ç掻ã楜ã«ããããšãã§ãããã©ããããããŠãããã¯ã¢ãããŒãã§ã¡ãœããã䜿çšãã䟡å€ããããã©ãããèããŠãã ããã
ãã¡ãããæéã®çµéãšãšãã«ãã»ãšãã©ã®ãã¬ãŒã ã¯ãŒã¯ããããã¯ã䜿çšããŠäœæããã³æžãæããããããããããã¯ã®å¿
èŠæ§ããŸããŸãé«ãŸã£ãŠããããšã«æ°ä»ãã§ãããã ãããã£ãŠãå°æ¥çã«å®å
šè£
åããããããã¯ã«å¯Ÿå¿ããããã«ãä»ãããããã¯ã䜿çšããŠãã ããã
iOS Dinerã«æ»ãïŒã¢ãã«ã¯ã©ã¹ã®ã«ã¹ã¿ãã€ãº
æåã®éšåã§ç«ã¡å¯ã£ãã®ãšåãå Žæããç¶ããŸãã æåã®éšåãèªãã§ããªãå ŽåããŸãã¯ã¡ã¢ãªå
ã®ãã¹ãŠãæŽæ°ããå Žåã¯ã
ãããããããžã§ã¯ããããŠã³ããŒãã§ããŸãã
Xcodeã§ãããžã§ã¯ããéãã
Project Navigatorã«åãæ¿ããŸãã
iOSDinerãã©ã«ããŒãå³ã¯ãªãã¯ãã[
æ°ããã°ã«ãŒã ]ãéžæããŸãã ãããã¢ãã«ãšåŒã³ãŸãããã
äœæããã
ã¢ãã«ãã©ã«ããå³ã¯ãªãã¯ããŠã
æ°èŠãã¡ã€ã«âObjective-Cã¯ã©ã¹ ïŒãŸãã¯Cocoa Touchã¯ã©ã¹ïŒãéžæããŸãã ãIODItemããšåŒã³ã
NSObjectã芪ã¯ã©ã¹ãšããŠéžæããŸãã
äžèšã®æé ãç¹°ãè¿ããŠã
IODOrderã¯ã©ã¹ãäœæããŸãã
ããã§å¿
èŠãªãã¹ãŠã®ã¯ã©ã¹ãã§ããŸããã ã³ãŒãã®æãæ¥ãŸããã
IODItemãæ§æãã
IODItem.hãéã
ãŸã ã ãŸãã
NSCopyingãããã³ã«ã
classã«è¿œå ããå¿
èŠããããŸãã ãããã³ã«
ã¯ã©ã¹ãå®è£
ããã¡ãœããã«é¢ããããçš®ã®ãæ
£ç¿ãã§ãã ãããã³ã«ãã¯ã©ã¹ã§å®£èšãããŠããå Žåãåãã¯ã©ã¹ã§ããããã³ã«ã«èšè¿°ãããŠããå¿
é ãŸãã¯ãªãã·ã§ã³ã®ã¡ãœãããå®çŸ©ããå¿
èŠããããŸãã ãããã³ã«å®£èšã¯æ¬¡ã®ãšããã§ãã
@interface IODItem : NSObject <NSCopying>
次ã«ããªããžã§ã¯ãã®ããããã£ãè¿œå ããŸãã åãªããžã§ã¯ãã«ã¯ãååãäŸ¡æ Œãç»åãã¡ã€ã«åããããŸãã
IODItem.hã¯æ¬¡ã®ããã«ãªããŸãã
#import <Foundation/Foundation.h> @interface IODItem : NSObject <NSCopying> @property (nonatomic,strong) NSString* name; @property (nonatomic,strong) float price; @property (nonatomic,strong) NSString* pictureFile; @end
次ã«ã
IODItem.mã«åãæ¿ããŸãã ããã«èŠåã衚瀺ãããŸãã

ãã®èŠåã¯ã以åã«è¿œå ãã
NSCopyingãããã³ã«ã«é©çšãããŸãã ãããã³ã«ã¯ãã€ã³ãã£ã³ã°ã¡ãœãããèšè¿°ã§ããããšãèŠããŠããŸããïŒ ãããã£ãŠã
NSCopyingã§ã¯ã
â (id)copyWithZone:(NSZone *)zone
ãå®çŸ©ããå¿
èŠããããŸãã ãã®ã¡ãœãããè¿œå ããããŸã§ãã¯ã©ã¹ã¯äžå®å
šãšèŠãªãããŸãã
以äžã
IODItem.mã® @endã®åã«è¿œå ã
ãŸã ã
- (id)copyWithZone:(NSZone *)zone { IODItem *newItem = [[IODItem alloc] init]; newItem.name = _name; newItem.price = _price; newItem.pictureFile = _pictureFile; return newItem; }
ããã ãã§ããèŠåã¯æ¶ããŸããã ãã®ã³ãŒãã¯ãæ°ããIODItemãªããžã§ã¯ããäœæããæ¢åã®ãªããžã§ã¯ãã®ããããã£ãã³ããŒããŠããã®æ°ããã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã
ããã«ãåæåã¡ãœãããå¿
èŠã§ãã ãªããžã§ã¯ãã®åæåæã«ãããã©ã«ãã®ããããã£å€ãç°¡åãã€è¿
éã«èšå®ã§ããŸãã
IODItem.mã«æžã蟌ã¿
ãŸã ã
- (id)initWithName:(NSString *)name andPrice:(NSNumber *)price andPictureFile:(NSString *)pictureFile { if(self = [self init]) { _name = name; _price = price; _pictureFile = pictureFile; } return self; }
IODItem.hã«æ»ãããã¡ã€ã«ãçµäºããåã«ãããã¿ã€ãã¡ãœãããè¿œå ããŸãïŒ@endïŒïŒ
- (id)initWithName:(NSString*)inName andPrice:(float)inPrice andPictureFile:(NSString*)inPictureFile;
IODOrderãæ§æãã
次ã«ãå¥ã®ã¯ã©ã¹ã§ãã
IODOrderã«åãçµã¿ãŸããã ã ãã®ã¯ã©ã¹ã¯ã泚æãšããã«é¢é£ä»ããããæäœïŒãªããžã§ã¯ãã®è¿œå ãåé€ã泚æã®ç·è²»çšã®èšç®ãç»é¢äžã®æ³šæã®å
容ã®è¡šç€ºïŒã«ãªããŸãã
IODOrder.hãéãã
ã€ã³ã¿ãŒãã§ã€ã¹ã®åã«ããããŒãã¡ã€ã«ã®ã€ã³ããŒããè¿œå ã
ãŸã ã
#import "IODItem.h"
ãããŠã
ã€ã³ã¿ãŒãã§ã€ã¹ã®äžã«ããããã£
ãæžããŸãïŒ
@property (nonatomic,strong) NSMutableDictionary* orderItems;
ããã¯ããŠãŒã¶ãŒãéžæãããªããžã§ã¯ããä¿åãããèŸæžã§ãã
ViewControllerã®ã»ããã¢ãã
ViewController.mã«åãæ¿ããŠãããããã£ãè¿œå ããŸãã
#import "ViewController.h" #import "IODOrder.h" @interface ViewController () @property (assign, nonatomic) NSInteger currentItemIndex; @property (strong, nonatomic) NSMutableArray *inventory; @property (strong, nonatomic) IODOrder *order;
currentItemIndexããããã£ã¯ãã€ã³ãã³ããªã§è¡šç€ºãããŠãããªããžã§ã¯ãã®ã€ã³ããã¯ã¹ãèšæ¶ããŸãã
ã€ã³ãã³ããªã®æå³
ã¯ç°¡åã«èª¬æã§ããŸããããã¯ãWebãµãŒãã¹ããååŸããIODItemèŠçŽ ã®é
åã§ãã
order-ã¯ã©ã¹
IODOrderã®ãªããžã§ã¯ãããŠãŒã¶ãŒãéžæãããªããžã§ã¯ããæ ŒçŽããŸãã
次ã«ã
viewDidLoadã¡ãœããã§ã
currentItemIndexãš
orderããªã»ãã
ããå¿
èŠããã
ãŸã ã
- (void)viewDidLoad { [super viewDidLoad]; self.currentItemIndex = 0; self.order = [[IODOrder alloc] init]; }
ããã§ã
ViewController.mã®éå§ã¯æ¬¡ã®ããã«ãªããŸãã
#import "ViewController.h" #import "IODOrder.h" @interface ViewController () @property (assign, nonatomic) NSInteger currentItemIndex; @property (strong, nonatomic) NSMutableArray *inventory; @property (strong, nonatomic) IODOrder *order; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.currentItemIndex = 0; self.order = [[IODOrder alloc] init]; }
ãããžã§ã¯ãããã«ãããŸãã èŠåã¯ãããŸããã
ã€ã³ãã³ããªãããŒãããŸã
次ã«è¿œå ãã
retrieveInventoryItemsã¯ã©ã¹ã®ã¡ãœããã¯ãWebãµãŒãã¹ããããŠã³ããŒããããã€ã³ãã³ããªãããŒãããŠåŠçããŸãã
ã泚æ ã¯ã©ã¹ã¡ãœããã¯ã+ãã§å§ãŸããã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã¡ãœããã¯ã-ãã§å§ãŸããŸãã
IODItem.mã§ãïŒimportãã£ã¬ã¯ãã£ãã®çŽåŸã«ã次ãè¿œå ããŸãã
#define INVENTORY_ADDRESS @"http://adamburkepile.com/inventory/"
ã泚æ WebãµãŒãã¹ãèªåã§ãã¹ãããå Žåã¯ãã¢ãã¬ã¹ãå€æŽããŸãã
次ã«ã
retrieveInventoryItemsã¡ãœãããè¿œå ã
ãŸã ã
+ (NSArray *)retrieveInventoryItems {
ãããŠããããæåã®ãããã¯ã§ãã ã³ãŒãã詳ããèŠãŠã¿ãŸãããã
- æåã«ãè¿ããããªããžã§ã¯ããæ ŒçŽããé
åãšãçºçããå¯èœæ§ã®ãããšã©ãŒãžã®ãã€ã³ã¿ã宣èšããŸããã
- NSDataãªããžã§ã¯ãã䜿çšããŠWebãµãŒããŒããããŒã¿ãããŒããããã®NSDataãªããžã§ã¯ããJSONãµãŒãã¹ã«æž¡ããŠããœãŒã¹ããŒã¿ãObjective-Cã¿ã€ãïŒNSArrayãNSDictionaryãNSStringãNSNumberãªã©ïŒã«ãã³ãŒãããŸãã
- 次ã«ã enumerateObjectsUsingBlockãå¿
èŠã§ããããã¯ããªããžã§ã¯ããNSDictionaryããIODItemã«ãå€æãããããã®åè¿°ã®ã¡ãœããã§ãã jsonInventoryé
åã§ãã®ã¡ãœãããåŒã³åºããé
åã®èŠçŽ ãNSDictionaryãšããŠIODItemãªããžã§ã¯ãã®åæåã¡ãœããã«æž¡ããããã¯ã䜿çšããŠç¹°ãè¿ããŸãã 次ã«ããã®æ°ãããªããžã§ã¯ããè¿ãããé
åã«è¿œå ããŸãã
- æåŸã«ãåšåº«ã®é
åãè¿ãããŸãã å¯å€ããŒãžã§ã³ãè¿ããããªãã®ã§ãé
åèªäœã§ã¯ãªããé
åã®ã³ããŒãè¿ããŠããããšã«æ³šæããŠãã ããã copyã¡ãœããã¯äžå€ã®ã³ããŒãäœæããŸãã
次ã«ã
IODItem.hãéããŠããããã¿ã€ãã¡ãœãããè¿œå ããŸãã
+ (NSArray*)retrieveInventoryItems;
ãã£ã¹ããããã¥ãŒãšã°ã©ã³ãã»ã³ãã©ã«ãã£ã¹ããã
ééããªãç¥ã£ãŠããå¿
èŠããããã1ã€ã®ããšã¯ã
ãã£ã¹ããããã¥ãŒã§ãã
ViewController.mã«åãæ¿ããŠãããããã£ãè¿œå ããŸãã
@property (strong, nonatomic) dispatch_queue_t queue;
ViewDidLoadã¡ãœããã®æåŸã«ã
次ã®è¡ãèšè¿°ããŸãã
self.queue = dispatch_queue_create("com.adamburkepile.queue",nil);
dispatch_queue_createã¡ãœããã®æåã®ãã©ã¡ãŒã¿ãŒã¯ãã¥ãŒã®ååã§ãã 奜ããªååãä»ããããšãã§ããŸããããã®ååã¯äžæã§ãªããã°ãªããŸããã ãããã£ãŠãAppleã¯ãã®ååã«éDNSã¹ã¿ã€ã«ãæšå¥šããŠããŸãã
次ã«ããã®ãã¥ãŒã䜿çšããŸãããã
viewDidAppearã«æžã蟌ã¿ãŸãã
self.ibChalkboardLabel.text = @"Loading inventory..."; self.inventory = [[IODItem retrieveInventoryItems] mutableCopy]; self.ibChalkboardLabel.text = @"Inventory Loaded\n\nHow can I help you?";
ãããžã§ã¯ããå®è¡ããŸãã äœãããããã§ãããïŒ
IODItemã§å®çŸ©ãããŠãã
retrieveInventoryItemsã¡ãœããã䜿çšããŠãWebãµãŒãã¹ãåŒã³åºããã€ã³ãã³ããªãªããžã§ã¯ããè¿ããããããé
åã«å
¥ããŸãã
PHPã¹ã¯ãªãã
ã®æåŸã®éšåããã®5ç§ã®é
延ãèŠããŠããŸããïŒ ããããããã°ã©ã ãå®è¡ãããšããã€ã³ãã³ããªãèªã¿èŸŒãã§ããŸã...ãã¯è¡šç€ºãããã5ç§åŸ
ã£ãŠãããã€ã³ãã³ããªãèªã¿èŸŒãŸããŸããããšè¡šç€ºãããŸãã
åé¡ã¯ããã§ããWebãµãŒãã¹ãžã®åŒã³åºãã¯ãã¡ã€ã³ãã¥ãŒããããã¯ããŠãããªãŒãºãããã©ãã«ããã¹ããå€æŽã§ããªãããã«ããŸãã ã¡ã€ã³ã©ã€ã³ã«ç§»åããã«ããã®ãããªæäœã«äœ¿çšã§ããå¥ã®ã©ã€ã³ãããå Žåã¯...åæ¢ããŸãïŒ ãã§ã«ãããŸãã ããã§ã
Grand Central Dispatchãšãããã¯ãéåžžã«ç°¡åã«åœ¹ç«ã¡ãŸãã
Grand Central Dispatchã䜿çšãããšãã¡ã€ã³ã®ãã¥ãŒããããã¯ããããšãªããããŒã¿åŠçãå¥ã®ãã¥ãŒã«é
眮ã§ããŸãã
viewDidAppearã®æåŸã®2è¡ã次ã®è¡ã«
眮ãæããŸãã
dispatch_async(self.queue, ^{ self.inventory = [[IODItem retrieveInventoryItems] mutableCopy]; dispatch_async(dispatch_get_main_queue(), ^{ self.ibChalkboardLabel.text = @"Inventory Loaded\n\nHow can I help you?"; }); });
ããã§ã¯ãäœãè¿ããããã©ã¡ãŒã¿ãŒãæããªã2ã€ã®ç°ãªããããã¯ã䜿çšããŠããããšã«æ³šæããŠãã ããã
ãããžã§ã¯ããå床å®è¡ããŸãã ããã§æ£åžžã«æ©èœããããã«ãªããŸããã
ããã¹ããã©ãã«ã«å²ãåœãŠãããã«
dispatch_asyncãåŒã³åºãçç±ãäžæè°ã«æããªãã§ããããïŒ ã©ãã«ã«ããã¹ããé
眮ãããšãUIèŠçŽ ãæŽæ°ãããUIã«é¢é£ãããã¹ãŠã®ãã®ãã¡ã€ã³ãã¥ãŒã§åŠçãããŸãã ãããã£ãŠãããäžåºŠ
dispatch_asyncãåŒã³åºããŸãããã¡ã€ã³ãã¥ãŒã®ã¿ãååŸãããã®äžã®ãããã¯ãå®è¡ããŸãã
ãã®æ¹æ³ã¯ãæäœã«æéãããããUIèŠçŽ ãæŽæ°ããå¿
èŠãããå Žåã«éåžžã«äžè¬çã§ãã
Grand Central Dispatchã¯ããªãè€éãªã·ã¹ãã ã§ããããã®åçŽãªã¬ãã¹ã³ã§ã¯ãã®åœ¹å²ãç解ããããšã¯äžå¯èœã§ãã èå³ã®ããæ¹ã¯ã
iOSã®ãã«ãã¹ã¬ãããšGrand Central Dispatch for Beginnersãã芧ãã ãã ã
è¿œå ã®æ¹æ³
WebãµãŒãã¹ã䜿çšããŠãã€ã³ãã³ããªãããŠã³ããŒãããã³ä¿åããŸãã ããã§ãä¿åãããã€ã³ãã³ããªããŠãŒã¶ãŒã«è¡šç€ºãã3ã€ã®ãã«ããŒã¡ãœãããå¿
èŠã§ãã
æåã®ã¡ãœãã
findKeyForOrderItemïŒã
IODOrder.mã«è¿œå ã
ãŸã ã èŸæžãããªããžã§ã¯ãã«ã¢ã¯ã»ã¹ããã®ã«åœ¹ç«ã¡ãŸãã
- (IODItem *)findKeyForOrderItem:(IODItem *)searchItem {
ãã®ã¡ãœãããäœãããã®ãèŠãŠã¿ãŸãããã ãããããããè¡ãåã«ããªããããå¿
èŠãªã®ã説æããªããã°ãªããŸããã
IODOrderãªããžã§ã¯ãã«ã¯ãèŸæž
orderItems ïŒããŒãšå€ã®ãã¢ïŒãå«ãŸããŠããŸãã ããŒã¯
IODItemã§ãå€ã¯
NSNumberã§ã ãããã¯ããã®ãããª
IODItemãããã€æ³šæããããã瀺ããŸãã
çè«çã«ã¯ãã¹ãŠãåé¡ãããŸãããã
NSDictionaryã¯ã©ã¹ã®ç¹ç°ãªçã¯ããªããžã§ã¯ããããŒãšããŠå²ãåœãŠããå Žåããã®ãªããžã§ã¯ããå²ãåœãŠãã«ããã®ãªããžã§ã¯ãã®ã³ããŒãäœæããŠããŒãšããŠäœ¿çšããããšã§ãã ããã¯ãããŒãšããŠäœ¿çšãããªããžã§ã¯ãã
NSCopyingãããã³ã«ã«æºæ ããå¿
èŠãããããšã
æå³ããŸãïŒãããã
IODItemã§NSCopyingãããã³ã«ã宣èšãã
çç±ã§ãïŒã
ãã£ã¯ã·ã§ããªã®
orderItemsã®ããŒãš
ã€ã³ãã³ããªé
åã®
IODItemã¯åããªããžã§ã¯ãã§ã¯ãªãããïŒåãããããã£ããããŸãïŒãåçŽãªããŒæ€çŽ¢ãè¡ãããšã¯ã§ããŸããã 代ããã«ãåãªããžã§ã¯ãã®ååãšäŸ¡æ Œãæ¯èŒããŠãäžèŽãããã©ãããå€æããå¿
èŠããããŸãã ãããäžèšã®æ¹æ³ã®åäœã§ããããŒã®ããããã£ãæ¯èŒããŠæ£ãããã®ãèŠã€ããŸãã
ãããŠããã®ã³ãŒãã®æ©èœã¯æ¬¡ã®ãšããã§ãã
- ãããã¯ã®å¥ã®äŸã¯ã indexesOfObjectsPassingTestïŒã¡ãœããã䜿çšããŠååãšäŸ¡æ Œã®äžèŽãèŠã€ããããã«orderItemsãã£ã¯ã·ã§ããªã®ããŒãå埩åŠçããŸãã ^ã®åŸã«BOOLã«æ³šæããŠãã ããã ããã¯æ»ãåã§ãã ãã®ã¡ãœããã¯ããããã¯ã䜿çšããŠé
åãåŠçããŠ2ã€ã®ãªããžã§ã¯ããæ¯èŒãããããã¯ã«èšè¿°ãããŠãããã¹ãã«åæ Œãããã¹ãŠã®ãªããžã§ã¯ãã®ã€ã³ããã¯ã¹ãè¿ããŸãã
- ããã§ã¯ãè¿ãããæåã®ã€ã³ããã¯ã¹ãååŸããŸã
- 3.äžèŽããããŒãèŠã€ãããªãã£ãå Žåãnilãè¿ããŸãã
ãããã¿ã€ãã¡ãœãããIODOrder.hã«è¿œå ããããšãå¿ããªãã§ãã ããã
- (IODItem*)findKeyForOrderItem:(IODItem*)searchItem;
ViewController.mã«ç§»åããŠã次ã®ã¡ãœãããè¿œå ããŸãã
- (void)updateCurrentInventoryItem { if (self.currentItemIndex >=0 && self.currentItemIndex < [self.inventory count]) { IODItem* currentItem = self.inventory[self.currentItemIndex]; self.ibCurrentItemLabel.text = currentItem.name; self.ibCurrentItemLabel.adjustsFontSizeToFitWidth = YES; self.ibCurrentItemImageView.image = [UIImage imageNamed:[currentItem pictureFile]]; } }
currentItemIndexãš
ã€ã³ãã³ããªé
åã䜿çšããŠããã®ã¡ãœããã¯åã€ã³ãã³ããªãªããžã§ã¯ãã®ååãšç»åã衚瀺ããŸãã
ãã1ã€ã®ã¡ãœãããäœæããŸãã
- (void)updateInventoryButtons { if (!self.inventory || ![self.inventory count]) { self.ibAddItemButton.enabled = NO; self.ibRemoveItemButton.enabled = NO; self.ibNextItemButton.enabled = NO; self.ibPreviousItemButton.enabled = NO; self.ibTotalOrderButton.enabled = NO; } else { if (self.currentItemIndex <= 0) { self.ibPreviousItemButton.enabled = NO; } else { self.ibPreviousItemButton.enabled = YES; } if (self.currentItemIndex >= [self.inventory count]-1) { self.ibNextItemButton.enabled = NO; } else { self.ibNextItemButton.enabled = YES; } IODItem* currentItem = self.inventory[self.currentItemIndex]; if (currentItem) { self.ibAddItemButton.enabled = YES; } else { self.ibAddItemButton.enabled = NO; } if (![self.order findKeyForOrderItem:currentItem]) { self.ibRemoveItemButton.enabled = NO; } else { self.ibRemoveItemButton.enabled = YES; } if (![self.order.orderItems count]) { self.ibTotalOrderButton.enabled = NO; } else { self.ibTotalOrderButton.enabled = YES; } } }
ãã®ã¡ãœããã¯ã3ã€ã®ãã«ããŒã¡ãœããã®äžã§æé·ã§ãããããªãåçŽã§ãã ããã°ã©ã ã®ã¹ããŒã¿ã¹ããã§ãã¯ãããã¿ã³ãã¢ã¯ãã£ãã«ãããã©ããã決å®ããŸãã
ããšãã°ã
currentItemIndexããŒãã®å Žåã
ibPreviousItemButtonã¯ã¢ã¯ãã£ãã«ãªããŸãããæåã®èŠçŽ ã®åã«èŠçŽ ããªãããã§ãã
orderItemsã«èŠçŽ ããªãå Žåã
ibTotalOrderButtonãã¿ã³
ãã¢ã¯ãã£ãã«ããªãã§
ãã ãã ãããã¯ãéé¡ãèšç®ã§ããé åºããªãããã§ãã
ãããã£ãŠãããã3ã€ã®æ¹æ³ã䜿çšããŠãéæ³ãè¡ãããšãã§ããŸãã
ViewController.mã® viewDidAppearã«
æ»ã ãæåã«è¿œå ããŠã¿ãŸãããã
[self updateInventoryButtons];
次ã«ããããã¯ãããã«çœ®ãæããŸãã
dispatch_async(queue, ^{ self.inventory = [[IODItem retrieveInventoryItems] mutableCopy]; dispatch_async(dispatch_get_main_queue(), ^{ [self updateInventoryButtons]; [self updateCurrentInventoryItem]; self.ibChalkboardLabel.text = @"Inventory Loaded\n\nHow can I help you?"; }); });
ãã«ãããŠå®è¡ããŸãã
ãããããã«ãã³ããŒã¬ãŒãæ¥ãŸãã ããããæ®ãã®é£ã¹ç©ãèŠããã®ã§ããã¿ã³ãæ©èœãããŸãããã
ViewController.mã«ãã§ã«ãã
ibaLoadNextItemïŒããã³
ibaLoadPreviousItemïŒã¡ãœããã ããã€ãã®ã³ãŒããè¿œå ããŸãã
- (IBAction)ibaLoadPreviousItem:(UIButton *)sender { self.currentItemIndex--; [self updateCurrentInventoryItem]; [self updateInventoryButtons]; } - (IBAction)ibaLoadNextItem:(UIButton *)sender { self.currentItemIndex++; [self updateCurrentInventoryItem]; [self updateInventoryButtons]; }
ãããã®ãã«ããŒã¡ãœããã®ãããã§ã
currentItemIndexã®å€æŽãšUIã®æŽæ°ã䌎ããªããžã§ã¯ãéã®åãæ¿ããéåžžã«ç°¡åã«ãªããŸããã ã³ã³ãã€ã«ããŠå®è¡ããŸãã ããã§ãã¡ãã¥ãŒå
šäœãèŠãããšãã§ããŸãã
ãªããžã§ã¯ããåé€ããŠè¿œå ãã
ã¡ãã¥ãŒã¯ãããŸããã泚æãåãä»ãããŠã§ã€ã¿ãŒã¯ããŸããã ã€ãŸããè¿œå ãã¿ã³ãšåé€ãã¿ã³ã¯æ©èœããŸããã ããŠãæãæ¥ãŸããã
IODOrderã¯ã©ã¹ã«å¥ã®ãã«ããŒã¡ãœãããå¿
èŠã§ãã I
ODOrder.mã§ã¯ ã次ã®ããã«èšè¿°ããŸãã
- (NSMutableDictionary *)orderItems{ if (!_orderItems) { _orderItems = [[NSMutableDictionary alloc] init]; } return _orderItems; }
ããã¯ã
orderItemsããããã£ã®åçŽãªgetterã¡ãœããã§ãã
orderItemsã«æ¢ã«äœã
ãããå Žåãã¡ãœããã¯ãªããžã§ã¯ããè¿ããŸãã ããã§ãªãå Žåã¯ãæ°ãããã£ã¯ã·ã§ããªãäœæãã
orderItemsãå²ãåœãŠãŠè¿ããŸãã
次ã«ã
orderDescriptionã¡ãœããã«
åãçµã¿ãŸãã ãã®ã¡ãœããã¯ããã§ãŒã¯ããŒãã«åºåããããã®ç·ãæäŸããŸãã
IODOrder.mã«æ¬¡ã®ããã«èšè¿°ããŸãã
- (NSString*)orderDescription {
å°ã説æïŒ- ããã¯ãé åºã説æããè¡ã§ããå泚æãªããžã§ã¯ããããã«è¿œå ãããŸãã
- ãã®ã³ãŒãã¯ãorderItemsãã£ã¯ã·ã§ããªããŒã®é
åãåãåããsortedArrayUsingComparatorïŒãããã¯ã䜿çšããŠããŒãååã§ãœãŒãããŸãã
- ãã®ã³ãŒãã¯ãããŒã®ãã§ã«ãœãŒããããé
åã䜿çšããŠããããã§ã«ããç¥ãããŠããenumerateObjectsUsingBlockïŒ ãåããŒãIODItemã«å€æããå€ïŒæ°éïŒãåãåããorderDescriptionã«è¡ãè¿œå ããŸãã
- æåŸã«ãæååorderDescriptionãè¿ããŸãããããã§ããã®ã³ããŒã®ã¿ãè¿ããŸãã
IODOrder.hã«ç§»åããŠãããã2ã€ã®ã¡ãœããã®ãããã¿ã€ããè¿œå ããŸãã - (void)updateCurrentInventoryItem; - (void)updateInventoryButtons;
ãªããžã§ã¯ããã泚æ説æè¡ãååŸã§ããããã«ãªã£ãã®ã§ãViewController.mã«åãæ¿ããŠãåŒã³åºãã¡ãœãããè¿œå ããŸãã - (void)updateOrderBoard { if (![self.order.orderItems count]) { self.ibChalkboardLabel.text = @"No Items. Please order something!"; } else { self.ibChalkboardLabel.text = [self.order orderDescription]; } }
ãã®ã¡ãœããã¯ãé åºå
ã®ãªããžã§ã¯ãã®æ°ã確èªããŸããååšããªãå ŽåãæååãNo Itemsãäœã泚æããŠãã ããïŒããã以å€ã®å Žåãã¡ãœããã¯IODOrderã¯ã©ã¹ã®orderDescriptionã¡ãœããã䜿çšããŠã泚æã説æããæååã衚瀺ããŸããããã§ãçŸåšã®é åºã«åŸã£ãŠããŒããæŽæ°ã§ããŸããviewDidAppearãããããã¯ãæŽæ°ããŸãã dispatch_async(self.queue, ^{ self.inventory = [[IODItem retrieveInventoryItems] mutableCopy]; dispatch_async(dispatch_get_main_queue(), ^{ [self updateOrderBoard];
以äžã®æ°è¡ã®ãœãŒã¹ã³ãŒããæžãçŽããã ããªã®ã§ãããã¯ç¡æå³ã«æãããããããŸããããæ£ç¢ºãã®ããã«ãããè¡ãããšãã§ããŸãã次ã®ã¡ãœããã¯ããªããžã§ã¯ãã泚æã«è¿œå ããŸãã移åããŸãIODOrder.mã - (void)addItemToOrder:(IODItem*)inItem {
ç§ã説æããïŒ- åã«è¿œå ããã¡ãœããã䜿çšããŠãorderItemã®ããŒãèŠã€ããŸãããªããžã§ã¯ããèŠã€ãããªãå Žåãåã«nilãè¿ãããšã«æ³šæããŠãã ããã
- ãªããžã§ã¯ããé åºã§èŠã€ãããªãã£ãå Žåã¯ã1ã«çããéã§è¿œå ããŸãã
- ãªããžã§ã¯ããèŠã€ãã£ãå Žåããã®çªå·ãèŠãŠ1å¢ãããŸãã
- æåŸã«ãå
ã®ã¬ã³ãŒããåé€ããæŽæ°ãããæ°éã§æ°ããããŒãžã§ã³ãèšé²ããŸãã
æ¹æ³removeItemFromOrderïŒã»ãŒåãaddItemToOrderïŒ ãã§ã¯IODOrder.mã®æžã蟌ã¿ïŒ - (void)removeItemFromOrder:(IODItem*)inItem {
泚æãããªããžã§ã¯ããåé€ããå Žåããã®æ³šæã§ãªããžã§ã¯ããèŠã€ãã£ãå Žåã«ã®ã¿äœããããå¿
èŠãããããšã«æ³šæããŠãã ãããèŠã€ãã£ãå Žåã¯ããã®éãèŠãŠã1ãã€æžãããªããžã§ã¯ããèŸæžããåé€ããã0ãã倧ããå Žåã¯ããã«æ°ãããªããžã§ã¯ããæ¿å
¥ããŸããIODOrder.hã«ç§»åããŠããããã¿ã€ããè¿œå ããŸãã - (void)addItemToOrder:(IODItem*)inItem; - (void)removeItemFromOrder:(IODItem*)inItem;
ViewController.mã§ããªããžã§ã¯ããåé€ããã³è¿œå ããããã®ãã¿ã³ã®ã³ãŒããèšè¿°ã§ããŸãã - (IBAction)ibaRemoveItem:(UIButton *)sender { IODItem* currentItem = self.inventory[self.currentItemIndex]; [self.order removeItemFromOrder:currentItem]; [self updateOrderBoard]; [self updateCurrentInventoryItem]; [self updateInventoryButtons]; } - (IBAction)ibaAddItem:(UIButton *)sender { IODItem* currentItem = self.inventory[self.currentItemIndex]; [self.order addItemToOrder:currentItem]; [self updateOrderBoard]; [self updateCurrentInventoryItem]; [self updateInventoryButtons]; }
äž¡æ¹ã®ã¡ãœããã§è¡ãå¿
èŠãããã®ã¯ãã€ã³ãã³ããªé
åããçŸââåšã®ãªããžã§ã¯ããååŸãããããaddItemToOrderïŒãŸãã¯removeItemFromOrderïŒã«æž¡ããUIãæŽæ°ããããšã ãã§ãããããžã§ã¯ãããã«ãããŠãã«ãããŸããããã§ããªããžã§ã¯ããè¿œå ããã³åé€ã§ããããŒããæŽæ°ãããŸããUIAnimation
ããã°ã©ã ãå°ã埩掻ãããŸããããibaRemoveItemïŒããã³ibaAddItemMethodïŒãå€æŽããŸãã - (IBAction)ibaRemoveItem:(UIButton *)sender { IODItem* currentItem = [self.inventory objectAtIndex:self.currentItemIndex]; [self.order removeItemFromOrder:currentItem]; [self updateOrderBoard]; [self updateCurrentInventoryItem]; [self updateInventoryButtons]; UILabel* removeItemDisplay = [[UILabel alloc] initWithFrame:self.ibCurrentItemImageView.frame]; removeItemDisplay.center = self.ibChalkboardLabel.center; removeItemDisplay.text = @"-1"; removeItemDisplay.textAlignment = NSTextAlignmentCenter; removeItemDisplay.textColor = [UIColor redColor]; removeItemDisplay.backgroundColor = [UIColor clearColor]; removeItemDisplay.font = [UIFont boldSystemFontOfSize:32.0]; [[self view] addSubview:removeItemDisplay]; [UIView animateWithDuration:1.0 animations:^{ removeItemDisplay.center = [self.ibCurrentItemImageView center]; removeItemDisplay.alpha = 0.0; } completion:^(BOOL finished) { [removeItemDisplay removeFromSuperview]; }]; } - (IBAction)ibaAddItem:(UIButton *)sender { IODItem* currentItem = [self.inventory objectAtIndex:self.currentItemIndex]; [self.order addItemToOrder:currentItem]; [self updateOrderBoard]; [self updateCurrentInventoryItem]; [self updateInventoryButtons]; UILabel* addItemDisplay = [[UILabel alloc] initWithFrame:self.ibCurrentItemImageView.frame]; addItemDisplay.text = @"+1"; addItemDisplay.textColor = [UIColor whiteColor]; addItemDisplay.backgroundColor = [UIColor clearColor]; addItemDisplay.textAlignment = NSTextAlignmentCenter; addItemDisplay.font = [UIFont boldSystemFontOfSize:32.0]; [[self view] addSubview:addItemDisplay]; [UIView animateWithDuration:1.0 animations:^{ [addItemDisplay setCenter:self.ibChalkboardLabel.center]; [addItemDisplay setAlpha:0.0]; } completion:^(BOOL finished) { [addItemDisplay removeFromSuperview]; }]; }
ã³ãŒãã¯ãããããããŸãããç°¡åã§ããæåã®éšåã¯UILabelãäœæãããã®ããããã£ãå
¬éããŸãã2çªç®ã¯ãäœæãããã©ãã«ã移åããã¢ãã¡ãŒã·ã§ã³ã§ããããã¯ããããã¯ã®ããUIViewã¢ãã¡ãŒã·ã§ã³ã®äŸã§ããããã«ã€ããŠã¯ãã¬ãã¹ã³ã®åé ã§èª¬æããŸããããããžã§ã¯ããå®è¡ããŸãã
ããã§ããã¿ã³ãã¯ãªãã¯ããŠãªããžã§ã¯ããè¿œå ããã³åé€ãããšãã¢ãã¡ãŒã·ã§ã³ãèŠãããšãã§ããŸããéé¡ã®ååŸïŒåèšïŒ
IODOrder.mã«è¿œå ããå¿
èŠãããæåŸã®æ¹æ³ã¯ã泚æé¡ãèšç®ããæ¹æ³ã§ãã - (float)totalOrder {
ã³ãŒããèŠãŠã¿ãŸãããïŒ- , . __block . . __block , , , . , . .
- , , .
- enumerateKeysAndObjectsUsingBlockãããã¯ãä»ãããã®ã³ãŒãïŒorderItemsãã£ã¯ã·ã§ããªå
ã®ãã¹ãŠã®ãªããžã§ã¯ããå埩åŠçããåã®ãããã¯ã䜿çšããŠåãªããžã§ã¯ãã®åèšãæ€çŽ¢ãããã®å€ãé åºå
šäœã®åèšã«è¿œå ããŸãïŒããããé åºå€æ°ã«__blockããŒã¯ãŒããå¿
èŠãšããçç±ã§ã-ãããã¯å
ã§å€æŽããŸãïŒã
- 泚æã®åèšéé¡ãè¿ããŸãã
IODOrder.hã«æ»ãããããã¿ã€ããè¿œå ããŸãã - (float)totalOrder;
æåŸã«è¡ãããšã¯ãã¢ããªã±ãŒã·ã§ã³ã«éé¡èšç®ãè¿œå ããããšã§ãããã¹ãŠã®æ±ãä»äºãããããšã«ãã£ãŠè¡ããTOTALORDERãæã
ã¯å¯äžã®ãã¿ã³ãæŒãããšã«ããããŠãŒã¶ãŒã®éé¡ã衚瀺ãããŸãåèšã®ããibaCalculateTotalã¡ãœããã«å
¥åããŸãã - (IBAction)ibaCalculateTotal:(UIButton *)sender { float total = [self.order totalOrder]; UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Total" message:[NSString stringWithFormat:@"$%0.2f",total] preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelButton = [UIAlertAction actionWithTitle:@"Close" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [alert dismissViewControllerAnimated:YES completion:nil]; }]; [alert addAction:cancelButton]; [self presentViewController:alert animated:YES completion:nil]; }
ããã§ã泚æã®éé¡ãèæ
®ããŠãç»é¢ã«è¡šç€ºããŸãã以äžã§ãïŒ ãããžã§ã¯ããå®è¡ããŸãã

ãããã¯ããŒãã·ãŒã
çµäºããåã«ã圹ç«ã€ãããã¯ã®ãªã¹ãã瀺ããŸããNSArray
- enumerateObjectsUsingBlockã¯ããããããªããžã§ã¯ããå埩åŠçããããã«æãé »ç¹ã«äœ¿çšããããããã¯ã§ãã
- enumerateObjectsAtIndexesïŒusingBlockïŒ -åãããenumerateObjectsUsingBlockãå¯äžå¯èœãªäžå®æéå
ã®ãªããžã§ã¯ãããœãŒãããŸãã
- indexsOfObjectsPassingTestïŒ -ãããã¯ã¯ããããã¯ã«ãã£ãŠèšè¿°ããããã¹ãã«åæ Œãããªããžã§ã¯ãã®ã€ã³ããã¯ã¹ã®ã»ãããè¿ããŸãããªããžã§ã¯ãã®ç¹å®ã®ã°ã«ãŒããèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã
NSDèŸæž
ãŠã€ãã¥ãŒ
ã°ã©ã³ãã»ã³ãã©ã«æŽŸé£
ç¬èªã®ãããã¯ãäœæãã
以äžã¯ãã«ã¹ã¿ã ãããã¯ãäœæããããã®ã³ãŒããµã³ãã«ã§ãã
ãããã¯ã¯Objective-Cãªããžã§ã¯ãã§ãããããå°æ¥ã®åç
§ã®ããã«ããããã£ã«ä¿åã§ããŸããããã¯ãäœããã®éåæã¿ã¹ã¯ïŒãããã¯ãŒã¯é¢é£ãªã©ïŒãå®äºããåŸã«ã¡ãœãããåŒã³åºãå Žåã«äŸ¿å©ã§ãã
æåŸã«ãtypedefã䜿çšããŠã³ãŒããç°¡çŽ åã§ããŸãã
ãããã¯ãšå®äº
æåŸã®ãã³ãããããã¯ãåãã¡ãœããã䜿çšãããšãXcodeããããã¯ãèªåè£å®ã§ãããããæéãç¯çŽããèµ·ãããããšã©ãŒãé²ãããšãã§ããŸããããšãã°ã次ãå
¥åããŸãã NSArray * array; [array enum
ãªãŒãã³ã³ããªãŒãããã°ã©ã ã¯enumerateObjectsUsingBlockãæ€åºããŸãããªãŒãã³ã³ããªãŒãããã«ã¯EnterããŒãæŒããŸãã次ã«ãããäžåºŠEnterããŒãæŒããŠãããã¯ãèªåè£å®ããŸããçµæã¯æ¬¡ã®ãšããã§ãã [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { code }
ã³ãŒãã®ä»£ããã«ã³ãŒããèšè¿°ããã¡ãœããåŒã³åºããéããã§ããã°ããã¹ãŠãæåã§å
¥åããããã¯ããã«ç°¡åã§ãã [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
次ã¯ã©ããžè¡ããŸããïŒ
ãããžã§ã¯ãã³ãŒãã¯ãã¡ãããããŠã³ããŒãã§ããŸããgitã«ç²ŸéããŠããå Žåã¯ããããããããžã§ã¯ãããã¹ãŠã®ã¹ãããã§ã³ãããã§ããŸãããã®åçŽãªã¢ããªã±ãŒã·ã§ã³ãäœæããéçšã§ããããã¯ã®ã·ã³ãã«ããšãã¯ãŒãæãããããžã§ã¯ãã§ãããã䜿çšããããã®ã¢ã€ãã¢ãåŸããšæããŸãããããããªãã®ãããã¯ã®ç¥ãåãã ã£ãå Žå-ããªãã¯å€§ããªäžæ©ãèžã¿åºããŸããããã«ãã¹ã¬ããããããã¯ãŒã¯ãªã©ã§æ©èœããã«ã¯ããããã¯ãåŠç¿ããå¿
èŠããããŸãããããã¯ã®è©³çŽ°ã«ã€ããŠã¯ã次ãåç
§ããŠãã ããã- ã¢ããã«ïŒãããã¯å
¥é
- AppleïŒåæå®è¡ããã°ã©ãã³ã°
- Gcdãã¥ãŒããªã¢ã«