macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSDataDetectorクラス

INDEX>Foundation>NSDataDetector

解説

編集時バージョン iOS7.0
apple(mac)
apple(iOS)

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.7以降
iOS 4.0以降
定義 NSRegularExpression.h

概要

テキスト中からURLや電話番号、日付、アドレスなどを検出するクラスです。
日本語で2013年8月15日と書いてある場合に日付として検出します。

iOS 6.0,7.0では変化はありません。

作成

データ検出(NSDataDetector)オブジェクトの作成は(+ dataDetectorWithTypes:error:)メソッドを使用します。allocで作成した後(– initWithTypes:error:)メソッドで初期化することもできます。
iOS5.1では下記のタイプは、設定はされていますが作成できないようです。(オブジェクトの作成ができず、例外が投げられます。)
NSTextCheckingTypeOrthography
NSTextCheckingTypeSpelling
NSTextCheckingTypeGrammar
NSTextCheckingTypeQuote
NSTextCheckingTypeDash
NSTextCheckingTypeReplacement
NSTextCheckingTypeCorrection

文字列から日付を検出するサンプル

#pragma mark NSDataDetector date
-(void)method005
{
    NSString *aString = @"Today is 2013年8月15日";
    NSError *error = nil;
    NSDataDetector *aDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate error:&error];
    NSArray *resultArray = [aDetector matchesInString:aString
                                              options:0
                                                range:NSMakeRange(0, [aString length])];
    
    [resultArray enumerateObjectsWithOptions:NSEnumerationConcurrent //並列
                                  usingBlock:^(id obj,NSUInteger idx,BOOL *stop){
                                      
                                      if (obj) {
                                          NSTextCheckingResult *tcResult = (NSTextCheckingResult *)obj;
                                          NSLog(@"%s %@ %u-%u",__FUNCTION__,[obj date],tcResult.range.location,tcResult.range.length );
                                      }
                                      
                                      return;
                                      
                                  }];
    //=>2013-08-15 03:00:00 +0000 9-10
}

文字列からURLを検出するサンプル

#pragma mark NSDataDetector dataDetectorWithTypes URL
-(void)method002
{
    NSString *aString = @"My site's URL is http://d.hatena.ne.jp/jjj777/.";
    NSDataDetector *aDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
    NSArray *matches = [aDetector matchesInString:aString
                                          options:0
                                            range:NSMakeRange(0, [aString length])
                                                    ];
    
    for (NSTextCheckingResult *match in matches) {
        
        if ([match resultType] == NSTextCheckingTypeLink) {
            NSString *matchingString = [match description];
            NSLog(@"found URL: %@", matchingString);
        }
    }
    
}

チェックタイプの取得

データ検出オブジェクトの検出タイプを取得するには(checkingTypes)プロパティを参照します。(読み取り専用)
iOS5.1でサポートされているタイプは下記の通りです。
NSTextCheckingTypeDate
NSTextCheckingTypeAddress
NSTextCheckingTypeLink
NSTextCheckingTypePhoneNumber
NSTextCheckingTypeTransitInformation


メソッド

データデテクターインスタンスを作成

+ dataDetectorWithTypes:error:
– initWithTypes:error:

チェックタイプを取得

checkingTypes property

定数

サブクラス化の注意