objective c [ios] : หาความสูงรวมของ content ใน scroll view

นั่งงงกับปัญหานี้นานมาก 
เพราะใช้วิธีวนลูป subview ของ scrollview เพื่อหาความสูงรวม 
ดันไปเจอไอสอง subview ลับของมัน

โชคดีที่ subview ของ scroll view ไม่มี uiimage
เลยใช้ [view isKindOfClass:[UIImageView class]]  เช็คเอา[view isKindOfClass:[UIImageView class]]

http://wiresareobsolete.com/wordpress/2010/03/uiscrollview-has-a-secret/

 

 

Cache ใช้งานง่ายสำหรับ objective c (ios)

กำลังหัดเขียน ios app

ไปเจอส่วนที่จะใช้ cache เลยเอามาแปะไว้ใน blog

https://github.com/FTW/FTWCache

มีฟังก์ชั่นหลักๆอยู่แค่ 3-4 อัน

setObject สำหรับเก็บ NSData ลง cache โดยผูกไว้กับ key
objectForKey ก็ดึง object มาจาก cache โดยใช้ key
resetCache

 

ตัวอย่าง
สมมติเรามี url ของ image ที่เราจะแสดงอยู่แล้ว เราอาจใช้ MD5Hash ของ url นั้นเป็น key

NSString *key = [imageURL.absoluteString MD5Hash];
NSData *data = [FTWCache objectForKey:key]; //ลองเอา key ไปหาก่อน
if (data) { //ถ้ามีก็ใช้รูปจาก cache
UIImage *image = [UIImage imageWithData:data];
cell.imageView.image = image;
} else { //ถ้าไม่มีก็ไปดึงจาก web

NSData *data = [NSData dataWithContentsOfURL:imageURL]; //ไปดึง data มาจาก webservice
[FTWCache setObject:data forKey:key]; //เก็บลง cache
UIImage *image = [UIImage imageWithData:data];
[tableView cellForRowAtIndexPath:indexPath].imageView.image = image;
}

โค้ดตัวอย่างข้างบนเอามาจาก http://khanlou.com/2012/08/asynchronous-downloaded-images-with-caching/

objective c เรียก REST webservice

เอามาจาก http://rajneesh071.blogspot.com/2013/07/how-to-make-rest-api-call-in-objective-c.html

We can call using this.

NSString *twitterUrl = @”YourUrlString”;
NSString *resp = [self makeRestAPICall: twitterUrl];

and method is

-(NSString*) makeRestAPICall : (NSString*) reqURLStr
{
NSURLRequest *Request = [NSURLRequest requestWithURL:[NSURL URLWithString: reqURLStr]];
NSURLResponse *resp = nil;
NSError *error = nil;
NSData *response = [NSURLConnection sendSynchronousRequest: Request returningResponse: &resp error: &error];
NSString *responseString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
NSLog(@”%@”,responseString);
return responseString;
}

วิธีใช้ NSUserDefaults

สำหรับคนที่กำลังหัดเขียนแอพ ios

มันมีวิธีเก็บข้อมูลในเครื่องอยู่ 4 วิธี คือ

  1. NSUserDefaults  ง่ายสุด เหมาะกับเก็บอะไรเล็กๆ สำหรับแอพที่ไม่ซับซ้อนมาก รู้สึกแรกว่าเริ่มเดิมทีมันเอาไว้เก็บ user setting  ไปๆมาๆใช้เก็บไปเรื่อย =_=
  2. property files (plist / XML)
  3. SQLLite  มันคือ relational database นั่นละ
  4. Core Data  framework ของ apple  ไม่รู้ ยังไม่ได้ดู

วันนี้จะมาโน้ตเรื่อง NSUserDefaults เฉยๆ เพราะกำลังลองใช้อยู่

วิธีเก็บค่า

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"myfistname" forKey:@"firstName"];
[defaults synchronize];

วิธีดึงค่า

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *firstName = [defaults objectForKey:@"firstName"];
NSLog(@”%@”,firstName);

 

object ที่เก็บใน NSUserDefaults จะถูกแปลงให้เป็นพวก  immutable เพราะงั้นเวลาเก็บพวก NSMutableArray แล้วจะดึงค่าออกมาใช้ ต้องทำประมาณนี้

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *followingList = [[NSMutableArray alloc] initWithArray:[defaults objectForKey:@"followingList"]];

Takumi @ Swissotel Le Concorde Hotel 2014 + menu (ทาคุมิที่โรงแรมแถวห้วยขวาง) + เมนู

ไปกินบุฟเฟ่ต์อาหารญี่ปุ่นมา ชื่อร้าน ทาคุมิ อยู่แถวๆ mrt ห้วยขวาง ทางออกหมายเลข 2 พอขึ้นมาแล้วมองหาโรงแรมเลยคับ เดินแปปเดียวประมาณ 5 นาทีถึง

หน้าตาโรงแรม ประมาณนี้

IMG_2699

ร้านจะอยู่ชั้น G เข้าไปข้างในแล้วจะอยู่ขวามือ (ย้ายลงมา จากเมื่อก่อนอยู่ชั้น 2)

IMG_2753

มาดูเมนูกันดีกว่า เปลี่ยนไปเยอะ จากเมื่อก่อนมีสองหน้า

บุฟเฟ่ต์เป็นแบบไม่จำกัดเวลา ผมไปตอน 6 โมง นั่งได้จนร้านปิด 4 ทุ่มคับ

มาดูหน้าตาอาหารดีกว่า

อันนี้เป็นออเดิร์ฟ ไก่อะไรสักอย่าง อร่อยดี

IMG_2714

เครื่องดื่มที่นี่ รวมอยู่ในค่าบุฟเฟ่ต์แล้วนะคับ โดยที่สั่งได้มี ชาเขียวร้อน ชาเขียวเย็น แล้วก็พวกน้ำอัดลม ถ้าสั่งนอกจากนี้จ่ายเองนะคับ

เปปซี่ อร่อยดี หวานๆ ไม่ซ่ามาก =.=

IMG_2723

คาราอาเกะ กรอบดี ร้อนใช้ได้ แต่จืดไปหน่อย ชอบของฮะจิบังมากกว่า

IMG_2724

เบค่อน อะไรสักอย่าง อร่อยดี น่าสั่งมาลองคับ ไม่เยอะด้วย

IMG_2725

แซลม่อน + มากุโร่(ทูน่า) ซาชิมิ อร่อยคับ ถึงกับต้องสั่งอีกรอบ

IMG_2726

Tako Jone (เป็นลูกน้อง เดวี่ โจนส์ pirate of caribbean) เย็นๆ เหมือนจะมีรสชาดนิดนึง เฉยๆ

IMG_2727

ซาบะ เทอริยากิ อยากได้ซอสเพิ่ม / หวานกว่านี้หน่อย แต่ก็โอเค

IMG_2728
หมูย่างเทอริยากิ อร่อย

IMG_2729

สมรรอบสอง :)

IMG_2733

ซูชิอร่อยดี แต่ข้าวแอบแน่นเหมือนกันนะ ตอนท้ายมีสั่งอีกรอบ
IMG_2734

ข้าวประมาณนี้
IMG_2735

IMG_2736
ยำแซลม่อน อร่อยดีคับ ไม่เผ็ดมาก
IMG_2738
ซุปมีให้เลือก 3 แบบ ซุปใสซีฟู้ด ซุปกิมจิหมูไก่ กะ ซุปโชยุ
ข้างล่างนี่เป็นซุปใส เห็นเค้าบอกขมๆ
IMG_2739
ไข่เจียวพันปลาไหล เป็นการมิกซ์แอนด์แมทช์ของถูกกับของแพง
เนื่องจากผมไม่เห็นปลาไหลในเมนู เลยถามพี่พนักงานว่ามีซูชิปลาไหลมั้ย เค้าบอกว่าไม่มีนะคับ อดกินไป ใครอยากกินต้องสั่งอันนี้นะเออ ไม่ค่อยอร่อย ไข่มันขมๆกลบปลาไหลหมดอะIMG_2740
โซบะ จืดคับ กินไม่หมดอะ อันนี้
IMG_2741
เทมปุระ กุ้ง 3 ผัก 1 คับ
IMG_2743
ทงคัตสึ ส่วนตัวรู้สึกว่าที่นี่ทำของทอดได้ดีหมดเลย ในเรื่องของอุณหภูมิและความกรอบ
IMG_2744
สุดท้ายละคับ เป็นเนื้อปลาแล่บาง ราดด้วยซอสอะไรไม่รู้ ส่วนตัวไม่ค่อยชอบ มันแหยะๆ อะ
IMG_2745
ซูชิรอบสอง (ที่จริงมีรอบสามด้วยแต่ขี้เกียจถ่าย) ข้าวมันเยอะขึ้นหรือเราอิ่มนะ
ไอชิ้นเปื้อนๆนั่น ผมทำตกทรายคับ
IMG_2746
ปิดท้ายของหวาน ไอศกรีมชาเขียว วานิลลา และพุดดิ้งนม
IMG_2750
บรรยากาศในร้านและค่าเสียหายคับ
IMG_2748

IMG_2749

IMG_2748

IMG_2752

Overwriting wordpress get_the_excerpt to keep html tag

For anyone who’s trying to customize your wordpress theme and wonder how to get a chunk of your post contents, maybe first xx characters of your post, and display them on your homepage. WordPress comes with a function  called get_the_excerpt which will do exactly what you want BUT it will remove all your html tag.

For example, here’s how my post content looks like.

Screen Shot 2557-02-16 at 1.38.58 PM

You’ll see that there are new lines <br/> and paragraph <p> in my content. However, when I use get_the_excerpt in my homepage. It turns out like this.

Screen Shot 2557-02-16 at 1.38.44 PM

As you can see, all new lines and paragraph are removed and my content are displayed in simple text format.

So, how to prevent this? Here’s how.

Open you functions.php in your theme folder and add this function

Screen Shot 2557-02-16 at 1.46.27 PM

This is to create a new function for excerpting. The magic line is strip_tag. I put only <p> here but you can put whatever tag you want. For example, you can use strip_tag($text,’<p><img>’) to get your img as well.

But just adding this function won’t work because get_the_exceprt() is still wiring to the old function. So you’ll need to add two extra lines to your theme functions.php

Screen Shot 2557-02-16 at 1.48.09 PM

This is to tell wordpress that when you call get_the_exceprt. You are going to call your own improved_trim_exceprt, not the wp_ one.

This is how it looks like after fixing. You can see that new lines and paragraph are now interpreted correctly.

Screen Shot 2557-02-16 at 1.56.27 PM

One thing worth noting is that this will affect every get_the_excerpt in your code, and usually, there are more than one place. For example facebook sharing (og:description) might also use get exceprt as description when sharing to facebook and you may want to remove html tag before doing so (because it looks like crap with html tag). To work around this, you might want to create more than one custom excerpt function.

Below are example of my custom functions.

Screen Shot 2557-02-16 at 1.54.37 PM

btw. I’m starting my new site which is an example in this post. Feel free to visit.