Cocoa API解説(macOS/iOS)

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。

目次

NSString

INDEX>Foundation

変更しない文字列クラス

解説

作成後に変更不可な文字列を表すクラスです。変更可能な文字列はNSMutableStringクラスを使います。

継承 NSObject
準拠 NSCopying
  NSMutableCopying
  NSSecureCoding
  NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0 以降
iOS 2.0 以降
定義 NSPathUtilities.h
  NSString.h
  NSURL.h

概要

一旦作成すると変更できない文字列オブジェクトです。
作成後に変更可能にしたい場合はNSMutableStringクラスを使います。
書体や色など属性付文字列はNSAttributedStringNSMutableAttributedStringを使います。

ラベルなど表示するために使う文字列はローカライズして扱う必要があります。コード内に直接日本語を書かないようにしましょう。(NSLocalizedString()を使用)


C言語フレームワークである、Core FoundationのCFStringRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。

ARC環境では、管理対象のオブジェクトキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。

Objective-C

NSString *encodedString = 
    (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                 (CFStringRef)@"target strings",
                                                                 NULL,
                                                                 (CFStringRef)@";,/?:@&=+$#",
                                                                 kCFStringEncodingUTF8);


CFStringRef cfString = CFStringCreateWithFormat(kCFAllocatorDefault, NULL,
                                                    CFSTR("%@ = %.2f \n"),CFSTR("pi"),3.1415);
NSString *aString = (__bridge_transfer NSString *)cfString;



生成

文字列から作成する方法(-initWithString)、フォーマット文字列から作成する方法(-initWithFormat)が一般的です。この方法では文字列定数(@"")を使うことが出来ます。
フォーマット文字列から作成する方法ではcのprintf()で使えるものの他、%@が使えます。

ファイルから作成する方法としては、指定したURLのファイルから作成する方法(+stringWithContentsOfURL:encoding:error)があります。
ファイルパスで作成するメソッドも存在しますが、URLで指定する方法が推奨されていますのでURLで作成するようにしましょう。

C文字列(-stringWithCString:encoding)やUTF8から作成する(-stringWithUTF8String)方法もあります。

ファイルへの保存

URLへ保存する(writeToURL:atomically:encoding:error:)方法、ファイパスで保存する方法があります。

文字列の利用

文字列の長さ

文字列の長さは(-length)で取り出せます。

結合

末尾に文字列を付け加えて返す(-stringByAppendingFormat)方法やフォーマット文字列を付け加えて返す(-stringByAppendingString)方法などがあります。
NSStringは変更できないので、返されるオブジェクトは別のオブジェクトが作成されて返されます。

分離

指定した範囲の文字列を取り出す(-substringWithRange)や先頭から指定した位置の文字列を取り出す(-substringToIndex)や指定した位置から末尾までの文字列を取り出す(-substringFromIndex)があります。

ファイルパスを分割したい時など、区切り文字がわかっている場合には指定文字を分割記号として文字列を分割して配列で返す(-componentsSeparatedByString)方法があります。区切り文字が複数の場合はキャラクタセットを区切り文字として分割する(-componentsSeparatedByCharactersInSet)方法もあります。

検索・置換

指定した範囲を別の文字で置き換えた新しい文字列を返す(-stringByReplacingCharactersInRange:withString)方法があります。

iOS4.0からはBlocksが使えるので、文字列オブジェクトの中を検索して、マッチする行や部分文字列を返す(-enumerateLinesUsingBlock)方法が使えます。

-(void)enumerateLinesUsingBlock:(void (^)(NSString *line, BOOL *stop))block

引数
( void (^)(NSString *line, BOOL *stop) )block
検索に使用するブロック
line 検索文字列
stop 検索を中止
Objective-C

- (void)displayText062:(NSString *)text {
	
    NSLog(@"text 062 %@",text);
}
-(void)method062
{
    __block BOOL found = NO;
	
	//find word
	NSString *multiLine = [NSString stringWithString:@"apple\nbanana\norange\n" ];
	NSString *string = [NSString stringWithString:@"apple" ];
	
	[multiLine enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
		
		if ([line localizedCaseInsensitiveCompare:string] == NSOrderedSame) {
			*stop = YES;
			found = YES;
			NSLog(@"myBlock class= %@",[line className]);
            
            [self performSelectorOnMainThread:@selector(displayText062:) withObject:string waitUntilDone:NO];
            
		}else{
            *stop = YES;
			found = NO;
            [self performSelectorOnMainThread:@selector(displayText062:) withObject:@"NO!" waitUntilDone:NO];
            
        }
		
	}];
	
}
比較

大文字・小文字の区別をせず文字列が同じかどうかを比較する(-caseInsensitiveCompare)方法、ローカライズ文字列で比較する(-localizedCompare)方法などがあります。

数値への変換

文字列を数値に変換する方法が用意されています。
変換したあとのタイプのために幾つかの種類があります。整数値(NSInteger)にするには(-integerValue)を、浮動小数点値(float)にするには(-floatValue)を使います。

大文字、小文字の変換

単語の最初の文字を大文字にする(-capitalizedString)方法、全て小文字にする(-lowercaseString)方法、全て大文字にする(-uppercaseString)方法などがあります。

エンコード変換

指定したエンコーディングを使ってURLエンコーディング文字列を返す(-stringByAddingPercentEscapesUsingEncoding)方法が用意されているのですが、一部上手く機能しない文字があり、CFURLCreateStringByAddingPercentEscapes()が使われる場合が多いようです。

サンプルコード

https://github.com/oomori/NSString

作成

クラス

使用可能

OS X 10.0
iSO 2.0

参照

文字列の作成と初期化

空の文字列を作って返します
  + string
文字列を初期化して返します
  – init

指定したバイト列と長さとエンコーディングでNSStringを作って返します
  – initWithBytes:length:encoding

バイト列からエンコーディングを指定してNSStringを返します
  – initWithBytesNoCopy:length:encoding:freeWhenDone

指定したC文字列と範囲で文字列オブジェクトを初期化して返します
  – initWithCharacters:length

NSStringを初期化して返します
  – initWithCharactersNoCopy:length:freeWhenDone

文字列からを初期化して返します
  – initWithString

C文字列から指定したエンコーディングで初期化して返します
  – initWithCString:encoding

UTF8からNSStringを初期化して返します
  – initWithUTF8String
formatで指定した書式で初期化して返します
  – initWithFormat
formatで指定した書式と引数リストで初期化して返します
  – initWithFormat:arguments

formatで指定した書式と場所で文字列を作成、初期化します
  – initWithFormat:locale
formatで指定した書式と場所で文字列を作成、初期化します
 – initWithFormat:locale:arguments

データを指定したエンコーディングで変換して文字列を初期化して返します
  – initWithData:encoding
書式を指定して文字列を作って返します
+ stringWithFormat
書式を指定してローカライズされた文字列を作って返します
  + localizedStringWithFormat

指定したC文字列から指定した長さの文字列を作って返します
  + stringWithCharacters:length

文字列からコピーして新しく文字列を作って返します
  + stringWithString
C文字列から指定したエンコーディングで文字列を作ります
  + stringWithCString:encoding
UTF8文字からNSStringを作って返します
 + stringWithUTF8String
C文字列からNSStringのインスタンスを作って返します
  + stringWithCString OS X 10.4,iOS2.0で廃止
 → +stringWithCString:encodingを使用。
C文字列の先頭から指定した文字数分までのNSStringを作って返します
  + stringWithCString:length OS X 10.4,iOS2.0で廃止
C文字列からNSStringを初期化して返します
  – initWithCString: 10.4で廃止
C文字列の指定した長さでNSStringを初期化して返します
  – initWithCString:length OS X 10.4,iOS2.0で廃止
C文字列からNSStringを初期化して返します
  – initWithCStringNoCopy:length:freeWhenDone OS X 10.4,iOS2.0で廃止

ファイルから文字列を作成、初期化

ファイルから読み込んだデータでNSStringを作って初期化して返します
  + stringWithContentsOfFile:encoding:error

指定したファイルの内容から指定したエンコーディングで読み込んだ文字列を、初期化して返します。
  – initWithContentsOfFile:encoding:error
指定したファイルの内容から指定したエンコーディングで文字列を返します

+ stringWithContentsOfFile:usedEncoding:error
指定したファイルの内容を指定したエンコーディングで初期化して返します
  – initWithContentsOfFile:usedEncoding:error
ファイルから読み込んだデータでNSStringを作って初期化して返します
  + stringWithContentsOfFile 10.4で廃止
stringWithContentsOfFile:usedEncoding:errorを使用
ファイルの内容からNSStringを初期化して返します
  – initWithContentsOfFile 10.4で廃止
initWithContentsOfFile:usedEncoding:errorを使用

URLから文字列を作成、初期化

指定したファイルの内容から指定したエンコーディングで文字列を返します
  + stringWithContentsOfURL:encoding:error

指定したファイルの内容を指定したエンコーディングで初期化して返します
  – initWithContentsOfURL:encoding:error

指定したファイルの内容から指定したエンコーディングで文字列を返します
  + stringWithContentsOfURL:usedEncoding:error

ファイルから指定したエンコーディングを使って文字列オブジェクトを作成します
  – initWithContentsOfURL:usedEncoding:error

URLで読み込んでNSStringを作って返します
  + stringWithContentsOfURL 10.4で廃止
-stringWithContentsOfURL:encoding:error: または
-stringWithContentsOfURL:usedEncoding:error を使用

URLの内容からNSStringを初期化して返します
  – initWithContentsOfURL 10.4で廃止
-initWithContentsOfURL:encoding:error または →-initWithContentsOfURL:usedEncoding:error を使用

ファイルやURLへ書き込む

指定したエンコーディングでファイルに書き出します
  – writeToFile:atomically:encoding:error
指定したエンコーディングでURLに書き込みます
  – writeToURL:atomically:encoding:error
ファイルに書き込みます
 – writeToFile:atomically 10.4で廃止

URLに書き込みます
  – writeToURL:atomically 10.4で廃止

文字列の長さを得る

ユニコード文字列の長さを返します
  – length
指定したエンコーディングでの長さを返します
  – lengthOfBytesUsingEncoding
指定したエンコーディングでのバイト列の最大の長さを返します
  – maximumLengthOfBytesUsingEncoding

文字とバイトを得る

文字列で番号(index)で指定した文字を返します(ユニコード文字列)
  – characterAtIndex
bufferが示すメモリ領域にaRangeで示されたユニコード文字列を書き込みます。

– getCharacters:range

bufferが示すメモリ領域にaRangeで示されたユニコード文字列を書き込みます
  – getBytes:maxLength:usedLength:encoding:options:range:remainingRange

bufferが示すメモリ領域にユニコード文字列を書き込みます
  – getCharacters: 10.6で廃止

C文字列を得る

指定したエンコーディングのC文字列を返します
  – cStringUsingEncoding
指定したエンコーディングのC文字列をバッファに返します
  – getCString:maxLength:encoding
ヌルで終わるUTF8表示を返します
  – UTF8String
C文字列に変換して、そのポインタを返します
  – cString 10.4で非推奨
C文字列で表現した場合の長さを返します
  – cStringLength 10.4で廃止
文字列オブジェクトからC文字列を返します
  – getCString 10.4で廃止
バッファに指定した長さのC文字列を返します
  – getCString:maxLength 10.4で非推奨
バッファに指定した長さのC文字列を返します
– getCString:maxLength:range:remainingRange 10.4で非推奨
損失があるかもしれないC文字列を返します
  – lossyCString 10.4で非推奨

文字列の複合化

文字列にフォーマットされた文字列を追加します
  – stringByAppendingFormat
レシーバにaStringを追加した文字列を返します
– stringByAppendingString
文字列を指定した範囲で切り取り、代わりの文字列で埋めます
  – stringByPaddingToLength:withString:startingAtIndex

文字の分割

文字列をセパレータで分けて、配列にして返します
  – componentsSeparatedByString

引数で指定したキャラクタセットの文字で区切られる配列を返します。
  – componentsSeparatedByCharactersInSet
文字列の両端から指定した文字セットに含まれる文字列を取り除きます
  – stringByTrimmingCharactersInSet
指定した位置から末尾までの文字列を返します
  – substringFromIndex
指定した範囲の文字列を返します
  – substringWithRange
文字列の先頭から指定した位置までの文字列を返します

  – substringToIndex

文字やsubstringsを検索

文字列オブジェクトから文字セットに含まれる文字の範囲を返します
  – rangeOfCharacterFromSet

文字列からオプション付きで文字セットに含まれる文字の範囲を返します
  – rangeOfCharacterFromSet:options

指定した範囲の文字列からオプション付きで含まれる文字の範囲を返します
  – rangeOfCharacterFromSet:options:range

文字列を比較して部分一致した範囲の文字列を返します
  – rangeOfString
文字列をオプション付きで比較して部分一致したレシーバの範囲の文字列を返します
  – rangeOfString:options
文字列をオプション付きで比較して部分一致するレシーバの範囲を返します
  – rangeOfString:options:range
文字列をオプション、範囲、ロケールで比較して部分一致するレシーバの範囲を返します
  – rangeOfString:options:range:locale

指定した文字列とマッチする行があるかを検索します
  – enumerateLinesUsingBlock

指定した範囲で文字列とマッチする行があるかを調べます。
  – enumerateSubstringsInRange:options:usingBlock

部分文字列の置き換え

レシーバの指定した文字列を別の文字列で置き換えた新しい文字列を返します
  – stringByReplacingOccurrencesOfString:withString
レシーバに含まれる文字列(target)を別の文字列(replacement)で置き換えた新しい文字列オブジェクトを返します
  – stringByReplacingOccurrencesOfString:withString:options:range
レシーバの指定した範囲を文字列(replacement)で置き換えた新しい文字列を返します
  – stringByReplacingCharactersInRange:withString

行、段落範囲の調査

指定した範囲の行の開始・終了・終了位置から改行文字を除いた位置を参照で返します
  – getLineStart:end:contentsEnd:forRange
指定した範囲を含む行全体を返します
  – lineRangeForRange
段落をセットします
  – getParagraphStart:end:contentsEnd:forRange
指定した範囲が含まれる段落の範囲を返します
  – paragraphRangeForRange

文字列の配置

指定した番号の文字の連続した文字の固まりの範囲を返します
  – rangeOfComposedCharacterSequenceAtIndex
指定した範囲の文字の連続した文字の固まりの範囲を返します
  – rangeOfComposedCharacterSequencesForRange

文字をプロパティリストに変換

文字列をプロパティリストと見なして、プロパティリストを作成して返します
  – propertyList
文字列をキーと値で初期化した辞書として返します
  – propertyListFromStringsFileFormat

文字列の比較

大文字、小文字の区別をせず文字列の比較をして結果を返します
  – caseInsensitiveCompare
レシーバーとstringの間で大文字小文字を区別せずローカライズされた文字を比較します
  – localizedCaseInsensitiveCompare
文字列を比較して結果を返します
  – compare
レシーバーとstringの間でローカライズされた文字を比較します
  – localizedCompare
オプション付きで文字列を比較して結果を返します
  – compare:options
オプション付きで範囲を指定して文字列を比較して結果を返します。
  – compare:options:range
オプション付きで範囲とロケールを指定して文字列を比較して結果を返します
  – compare:options:range:locale
調査中
  – localizedStandardCompare
文字列がレシーバの先頭部分と一致するか返します
  – hasPrefix
文字列がレシーバの末尾部分と一致するか返します
  – hasSuffix
文字列が一致しているかを返します
  – isEqualToString
ハッシュテーブル・アドレスとして使える符号なし整数を返します
– hash

文字列の保持

指定した文字列を範囲とオプション付きで検索して範囲を返します
  – stringByFoldingWithOptions:locale

共有する接頭語を得る

先頭から比較して、レシーバとaStringに共通の文字列を返します
  – commonPrefixWithString:options

大文字小文字の変換

単語の最初の文字を大文字にして返します
  – capitalizedString
小文字にして返します
  – lowercaseString
各文字を大文字にして返します
  – uppercaseString
マッピングと文字列の取得
– decomposedStringWithCanonicalMapping
文字列の内容を標準化します
  – decomposedStringWithCompatibilityMapping
文字列を標準化して返します
  – precomposedStringWithCanonicalMapping
文字列を標準化して返します
  – precomposedStringWithCompatibilityMapping

数値を取得する

double数値を返します
  – doubleValue
浮動小数点値を返します
  – floatValue
整数値を返します
  – intValue
整数値を返します
  – integerValue
倍々精度値を返します
  – longLongValue
ブール値を返します
 – boolValue

エンコーディング

アプリケーションの環境の文字列エンコーディングを返します
+ availableStringEncodings
デフォルトC文字列エンコーディングを返します
  + defaultCStringEncoding
現在の言語のエンコーディングの名前を返す
  + localizedNameOfStringEncoding
エンコードを変換できるか返します
  – canBeConvertedToEncoding
レシーバーの文字列をencodingで指定した方法でエンコードしてNSDataで返します
  – dataUsingEncoding
指定した文字コードに変換したNSDataを作成して返します
  – dataUsingEncoding:allowLossyConversion

文字列を返します
  – description

レシーバーが情報の損失なしで切り替えられる最も速いエンコーディングを返します
  – fastestEncoding
レシーバーが情報の損失なしで切り替えられる最も小さいエンコーディングを返します
  – smallestEncoding

パス

配列の要素をパス区切り記号を挟んで結合した文字列を返します
  + pathWithComponents
レシーバをパスだと見て、パス区切りで区切られている要素を配列にして返します
  – pathComponents
ファイルシステムのパスとしてファイル名が完了しているかを試してみます
  – completePathIntoString:caseSensitive:matchesIntoArray:filterTypes
パス名だと見て、ファイルシステムが使う文字コードに変換したC文字列を返します
  – fileSystemRepresentation
ファイルシステムと合う文字列なら、YESを返してbufferに文字列を返します
  – getFileSystemRepresentation:maxLength
絶対パスかどうか返します
  – isAbsolutePath
ファイルパスの最後の部分(/より後)を返します
  – lastPathComponent
ファイルパスの拡張子を返します
  – pathExtension
~付のディレクトリ(フォルダ)を返します
  – stringByAbbreviatingWithTildeInPath
文字列を追加します(最後尾に/が付いていない場合は付加する
  – stringByAppendingPathComponent
ファイルパスに拡張子を追加します
  – stringByAppendingPathExtension
ファイルパスの最後の部分(/より後)を削除して返します
  – stringByDeletingLastPathComponent
文字列から拡張子を取り除きます
  – stringByDeletingPathExtension
チルダ付きのパスをフルパスにして返します
  – stringByExpandingTildeInPath
シンボリックリンクエイリアス)のパスをオリジナルファイルのパスにして返します
  – stringByResolvingSymlinksInPath
指定した文字をパスとみなして、パスをスタンダード化します
  – stringByStandardizingPath
レシーバの前に配列で現したパスを追加して返します
  – stringsByAppendingPaths

URL

指定したエンコーディングを使ってURLエンコーディングの文字列を返します
  – stringByAddingPercentEscapesUsingEncoding
URLエンコーディング文字列を指定したエンコーディングでNSStringにして返します
  – stringByReplacingPercentEscapesUsingEncoding