çéã§ã¯ã¦ãªããã°ãªã¼ãã¼ã»ã¢ããªãä½ã£ã¦ã½ã¼ã¹ã³ã¼ãå ¬éãã¦ã¿ãï¼
ã¯ã¦ãªããã°ã«ã¯äººæ°ã¨ã³ããªã¼ãè¿ãRSSãã£ã¼ããããã®ã§äººæ°ã¨ã³ããªã¼ã表示ããã¢ããªãåå¼·ãã¦ãã«ä½ã£ã¦ã¿ã¾ããã
Core Data ã«åå¾ãã人æ°ã¨ã³ããªã¼ãä¿åãã¦ãã®ã§ãªãã©ã¤ã³ã§ãã¿ãã¾ãã
(ãã ãã®ã¢ããªã表示ã§ããã®ã¯äººæ°ã¨ã³ããªã¼ã®ä¸è¦§ã ãã§ãã»ã»ã»)
http://blog.hatena.ne.jp/-/hotentry/rss
ã¢ããªã®ã¹ã¯ãªã¼ã³ã·ã§ããã§ãã
ã»ããã°ä¸è¦§ç»é¢(縦)

ã»ããã°è©³ç´°ç»é¢(縦)

ã»ããã°ä¸è¦§ç»é¢(横)

ã»ããã°è©³ç´°ç»é¢(横)

Xcode5ãã使ãããããªã£ãAuto LayoutãXCTestãªã©ãã¾ããã£ããã¢ããã§ãã¦ããªãã£ãé¨åã®åå¼·ãåä½ãã¹ããã¡ããã¨æ¸ãã¨ããç®çããã£ãã®ã§ãããä½ãã£ã±ãªãã§ã¯é¢ç½ããªãã®ã§å ¬éãã¾ãï¼
https://github.com/asakahara/ASHatenaBlogReader
ææ³ã¨ãã¦Auto Layoutã¯æ£ç´ããªãããã£ãã§ãï¼
ããã¾ã§UILabelã®é«ããå¯å¤ã«ãã表示ã¯NSString:sizeWithFont:constrainedToSize:lineBreakMode:ã使ã£ã¦æ¯åè¨ç®ãã¦ã¾ããã
Auto Layoutã®ä½¿ãå ´åãå¶ç´ã®è¨å®ããã¡ããã¨ãã¦ããã°UILabelã®é«ã調æ´ã¯åæã«ãã£ã¦ããã¾ãã
(ãã£ã¨æ©ãç¥ã£ã¦ããããã£ãã»ã»ã»)
åæã«ãã£ã¦ããããã§ sizeToFitãªã©ã®ã¡ã½ãããããã°ã©ã ããå¼ã³åºããªãããã«ãã¾ãããã
ãã ä¸ã¤åé¡ã¨ãã¦æ¨ªç»é¢ã«ã対å¿ãããã®ã§ããã縦ããæ¨ªç»é¢ã¸ããéã«StoryBoardããè¨å®ããå¶ç´ã ãã§ã¯UILabelã®æ¨ªå¹
ã®å¶å¾¡ãã©ãããã¾ãããã¾ããã
仿¹ãªãUILabel.preferredMaxLayoutWidthãæ¨ªç»é¢ã®ãµã¤ãºã«ä½µãã¦å¤æ´ããããã¨ã§å¯¾å¿ãã¦ãã¾ãã
- (void)updateLabelPreferredMaxLayoutWidthToCurrentWidth:(UILabel *)label { label.preferredMaxLayoutWidth = [label alignmentRectForFrame:label.frame].size.width; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; // 横ç»é¢ã«ããéã«ã©ãã«ã®æ¨ªå¹ ã縦ç»é¢ã®ãµã¤ãºã®ã¾ã¾ã«ãªã£ã¦ãã¾ãããã // preferredMaxLayoutWidthãç»é¢ãµã¤ãºã«ä½µãã¦èª¿æ´ãã [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.bodyLabel]; [self updateLabelPreferredMaxLayoutWidthToCurrentWidth:self.titleLabel]; [self.view layoutSubviews]; }
ãã®ä»ã«ãCore Dataç¨ã«åãã¦ä½¿ã£ãMagicalRecordã¯æã£ã以ä¸ã«ä¾¿å©ã§ããã
ç¹ã«ãã«ãã¹ã¬ããã§Core Dataãæ±ãé¨åãããªã楽ã«ãã¦ããã¾ãã
MagicalRecordã®ããã¥ã¡ã³ãã«ãã£ããµã³ãã«ãè¦ã¦ãããã°ç´å¾ãã¦ããããã¨æãã¾ãã
Person *person = ...;
[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){
Person *localPerson = [person MR_inContext:localContext];
localPerson.firstName = @"John";
localPerson.lastName = @"Appleseed";
} completion:^{
self.everyoneInTheDepartment = [Person findAll];
}];
ãããã¯å ã«æ¸ããå¦çãå ¨ã¦å¥ã¹ã¬ããã§å¦çãè¡ããå®äºãããã¯ã¯ã¡ã¤ã³ã¹ã¬ããã§åä½ãã¾ãã
ãã¨åä½ãã¹ãã¯XCTestã使ã£ã¦æä½éã®ã¢ãã«ã®ãã¹ãæ¸ãã¦ã¾ãã
HTTPéä¿¡å¨ãã¯OHHTTPStubs使ã£ã¦ãã£ã¦ã¾ãã
ä»åç¹ã«åèã«ããã¦ããã ããè³æã¨ãã¦ã¯ã¦ãªæç§æ¸ãããã¾ãã
åå¿è
ã®æ¹ã«ãåãããããå
容ã¨ãªã£ã¦ãããä¸éãããªãã°ãã®æã®ã¢ããªã¯èª°ã§ããã£ã¨èª°ã§ãä½ããã¯ãã§ãï¼
ä¸ããä½ã£ããåå¼·ããã®ã¯ããï¼ã¨ããæ¹ã¯ã½ã¼ã¹ã ãã§ããã¦ã³ãã¼ããã¦ã試ããã ããã
ãã£ã±ãã¢ããªä½ãã®ã¯æ¥½ããã§ããï¼