json2csharp

《json2csharp》C# 解析 JSON 好工具,快速產生解 JSON 程式碼

在 C# 的開發上,難免有遇到 JSON 需要解析的地方,而 json2csharp 是一個解析 JSON 的工具,透過這個線上工具,就可以馬上把 JSON 變成程式碼,讓你在程式中快速使用,如果你有解析 JSON 的需求,這個網站是你不可以錯過的好工具。

 

 

◎◎網站小檔案◎◎
網站名稱:json2csharp
網站介面:英文
網站性質:免費
是否需要登入:不需要
■ 網站網址:http://json2csharp.com/

 

如圖,在下方空白處輸入 JSON 的字串,輸入後按下【Generate】。

Read More

快還要更快!使用 NSDictionary 迭代取值法來印出 NSDictionary 全部的資料

XCode

 

NSDictionary 是 Objective-C 中一個相當好用的東西,很類似 Java 中的 Map 物件,都是以 key-Value 的方式儲存資料。Objective-c 在處理 JSON 資料時,也會將資料轉成 NSDictionary 的方式儲存。而在海芋最近使用 NSDictionary 的物件,必須將 NSDictionary 中的資料全部印出來,這時怎麼辦呢?

 

其實,在 Objective-C 中,就有一個函式 enumerateKeysAndObjectsUsingBlock,就可以一次繞完整個 NSDictionary 了,而這個函式在官方的定義如下:

- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj, BOOL *stop))block;

看到這,或許你就會知道了,他是使用 Block 的方式做處理,而有三個參數,第一個參數 key 就是 NSDictionary 的 key,obj 就是 NSDictionary 的 Value,*stop 就是要不要停止的意思。

 

舉例來說,如果你一開始建了一個 NSMutableDictionary,如下:

NSMutableDictionary* m_mapRequestCache;
m_mapRequestCache = [[[NSMutableDictionary alloc] init] autorelease];
m_mapRequestCache["0"] = @(0);
m_mapRequestCache["1"] = @(1);
m_mapRequestCache["2"] = @(2);

Read More

XCode

如何改變 UISegmentedControl 被選中和未被選中時的背景色與文字顏色

XCode

 

UISegmentedControl 是 iOS 開發的一個重要元件,而我們常常利用他來做條件的選擇,如果用 XCode 中的 Interface Build 來拉出 UISegmentedControl 畫面的話,預設只有 Tint Color 和 Background Color 可以選擇,也就是當 UISegmentedControl 中的條件被選中時,就用 TintColor 來當文字顏色,用 Background Color 來當背景色; 若是 UISegmentedControl 中的條件未被選中,則用  TintColor 來當背景色,用  Background Color 來當文字顏色。這樣對於程式開發顯然不夠用,所以我們需要一點擴充。

 

UISegmentedControl-1

▲ 當用 XCode 內建的 Interface Build 來拉出 Xib 畫面時可以選擇的選項超少

 

Read More

如何在 Objectivie-C 中計算 MD5 雜湊值?

MD5 是一個相當常使用雜湊演算法,通常是用於驗證字串或是檔案是否正確。最近海芋在 iOS App 開發過程中,也有需要在 Objectivie-C 中計算 MD5 雜湊值,在 Objectivie-C 中,其實就有計算雜湊值的函式 CC_MD5,使用方式也很簡單,如果有需要這個函式的朋友,那麼就趕快來看海芋的使用吧!

 

首先,我們先來看一下 CC_MD5 的組成, CC_MD5 原始的函式如下:

extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)

 

Read More

如何讓 UITextField 輸入的文字為英文數字限定,而且自動轉換成大寫英文字母?

UITextField 是開發 XCode 用來開發程式的一個重要元件,也是讓使用者自由輸入文字的元件。UITextField 相對於 Android 系統來說,就是 EditText。而如果我們要設計一個欄位,如身份證字號,只能讓使用者自動輸入英文或數字,在 Android 來說,只要從 XML 中設定就可以了,但在XCode 中,我們則必須寫在程式碼中。寫法其實並不難,有分好幾種方式,而海芋個人是比較喜歡用正規表達式來限定,所以以下的方式,就以正規表達式來做一個示範。

 

假設,我們有一個 UITextField,已命名為 m_TextField_ID,如果要判斷讓使用者在該 UITextField 只能輸入英數的話,那麼只要寫以下的函式。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == self.m_TextField_ID)
    {
        NSString* resultString = [textField.text stringByReplacingCharactersInRange: range
                                                                         withString: string];
        NSString *regExPattern = @"[a-zA-Z0-9]*";
        BOOL bIsInputValid = [[NSPredicate predicateWithFormat:@"SELF MATCHES %@", regExPattern] evaluateWithObject: resultString];
        return bIsInputValid;
    }
    return YES;
}

Read More

SVProgressHUD

[iOS開發] SVProgressHUD ~ 簡單易用的進度顯示器

最近海芋開始開發 iOS 程式,而在開發程式時,難免會遇到需要等待的程式碼,如下載進度,或者串接 Web Service 的服務,如果沒有一個等待的通知給使用者,會讓使用者有當機或者不好的使用經驗。「SVProgressHUD」則是一個進度顯示工具,有點像是 Android 的 Progress Bar,不同的是,SVProgressHUD 是以圓型進度工具顯示,相當符合 iOS 的設計風格,如果在找 Android Progress Bar 代替品的朋友,可以趕緊下載這個程式碼來開發您的 iOS 程式。

 

◎◎軟體小檔案◎◎
軟體名稱:SVProgressHUD
軟體版本:Release 14
軟體介面:英文
支援系統:iOS 開發
軟體下載:http://forum.jeasy.info/viewtopic.php?f=213&t=2071

 

在使用這個第三方套件前,我們先來看一下使用 SVProgressHUD 所呈現的效果,預設是六種效果。
SVProgressHUD
Read More

[Android 開發] 如何把 Eclipse 專案轉移到 Android Studio?

如果你是 Android 工程師,那麼你要注意的是,Android Studio 已經成為官方指定的開發工具了,目前許多人都還是使用 Eclipse 的開發方式,不過將來勢必有一天一定要將專案轉移至 Android Studio 來進行開發。而如果將原本的 Eclipse 專案匯出至 Android Studio 呢?其實很簡單,只要依下列的方式就可以了。

 

在使用 Android Studio 前,可以先「從本站下載 Android Studio」,並且觀看基本教學,當然最後會出現觀迎畫面,理論上是要選擇【Import Non-Android Studio Project】,不過先不要動作,先打開 Eclpise 或是 ADT Bundle

Read More

[教學] 如何使用 Eclipse、Android SDK、ADT 配置 Android 開發環境 ? (Android SDK 24.0.2 版下載)

Android 開發工程師在開發 Android 程式前,一定要先佈屬好 Android 的開發環境,而目前比較受到大家推薦的開發工具莫過於是 Eclipse 了,另外佈屬 Android SDK 也是一個必要的程序,而在之前海芋教過如何使用「ADT Bundle」來配置,不過應該有人跟海芋一樣,喜歡分開安裝,在這裡海芋來教大家如何分開安裝來配置。

 

 

◎◎軟體小檔案◎◎
軟體名稱:Android SDK
軟體版本:24.0.2
軟體介面:英文
軟體性質:免費軟體
支援系統:MAC OS / Windows / Linux
Win版下載:http://forum.jeasy.info/viewtopic.php?f=61&t=1578
Mac版下載:http://forum.jeasy.info/viewtopic.php?f=62&t=1579
Linux版下載:http://forum.jeasy.info/viewtopic.php?f=186&t=2019
官方網站:http://developer.android.com/sdk/index.html

 

Step 1.
首先,先安裝好 「JAVA SDK」 後 (Mac OS 有內建 JAVA SDK),再去「Android SDK」下載這一個軟體,下載前請先按下「DOWNLOAD FOR OTHER PLATFORMS」。

Read More

Category 是什麼?如何在 Objective-C 中使用 Category?

在 Java、C++ 等物件化的程式語言中,如果我們要擴充 Class,只需要使用「繼承」的寫法就可以了,在 Objective-C 中,當然也支援了繼承的概念,不過更特別的是他支援了「Category」這種繼承型態。什麼是「Category」呢?簡單來說,就是將現有物件的功能再加以擴充函式,讓現有物件更能符合自己想實做的方式。而使用 Category 只能針對既有元件再新增或者覆寫函式,並不能像繼承一樣新增成員變數。以下是 Category 的實做。

 

@interface 原Class名稱 (Category Name)
// function 宣告
@end

@implementation 原Class名稱 (Category Name)
// function 實做
@end

 

舉例來說,如果我要擴充 NSString 這個物件,在裡面新增一個的函式 showMySiteName 來顯示我的網站名稱,那麼我只要在 A.h 檔中這樣寫。

@interface NSString (NSStringCategory)
- (void) showMySiteName;

@end

 

接下來,我在 A.m 檔案做這個函式,就可以從外面存取了。

@implementation NSString (NSStringCategory)
- (void) showMySiteName{
    NSLog(@"海芋小站真的棒!!");
}
@end

 
Read More

[Android 開發] This message is already in use 解法

Handler 和 Message 是 Android 用來更新畫面的重要方法,有在開發 Android 的朋友都應該要知道這兩個的用法。而海芋最近使用這個方法來開發程式時,碰到了「android.util.AndroidRuntimeException: This message is already in use」這個問題,這是原本的寫法。

private int MSG_INCREASE_PROGRESSBAR = 9527;
private int MSG_Done = 5566;
private ProgressDialog m_progressDialog = null;

private Runnable m_runnable = new Runnable(){
  @Override
  public void run() {
    try {
      Message msg = new Message();
      for (int i = 0; i < 100; i++){
        msg.what = MSG_INCREASE_PROGRESSBAR;
        m_Handler.sendMessage(msg);
      }
 
      msg.what = MSG_Done;
      m_Handler.sendMessage(msg);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  } 
};

private Handler m_Handler = new Handler(){
  @Override
  public void handleMessage(Message msg) {
    super.handleMessage(msg);
    switch (msg.what){
      case MSG_INCREASE_PROGRESSBAR:
        if (m_progressDialog != null)
          m_progressDialog.incrementProgressBy(1);
        break;
      case MSG_DelteDone:
        if (m_progressDialog != null){
          m_progressDialog.dismiss(); 
          m_progressDialog = null; 
        }
    } 
  } 
};

 

Read More