2011-07-14 2 views
0

私は、単語で大量の配列を作成しようとしています。最終的には、配列からランダムな単語を取り出して表示することができます(私はそれをマスターしました)。私が思っているのは、この配列を作成する最良の方法です。私はちょうどで入力する必要があります.txtファイルを使用してこの配列を作成する最も良い方法は?

[NSArray arrayWithObjects:@"word1",@"word2",@"word3",@"word4",@"word5",nil] 

や単語を.txtファイルに保存されていると私はちょうどループが配列にテキストファイル内の各単語を追加することができ、より良い方法はありますか?

私は100の単語で配列を埋めることを検討しています。すべての援助は高く評価されます:D。

UPDATEは、いくつかの研究を行った後、私はこのhereを見つけました。それはまさに私が望んでいたようです。唯一のことは、私は完全なNSStringのメソッドがある知っている

それは私に推奨されていません警告

「stringWithContentsOfFile」を与えている:

stringWithContentsOfFile:(NSString *) encoding:(NSStringEncoding) error:(NSError **) 

しかし、私は何を置くかわかりませんエンコーディングのために(そして、私はNSErrorのために 'nil'を入れることができると仮定しています)。それ以外は魅力のように機能します。私はパスからURLに切り替えることを検討するかもしれません。ここで私が見つけたコードは次のとおりです。

- (NSArray *) readFile:(NSString *) path { 


NSString *file = [NSString stringWithContentsOfFile:path]; 

NSMutableArray *dict = [[NSMutableArray alloc] init]; 
NSCharacterSet *cs = [NSCharacterSet newlineCharacterSet]; 
NSScanner *scanner = [NSScanner scannerWithString:file]; 

NSString *line; 
while(![scanner isAtEnd]) { 
    if([scanner scanUpToCharactersFromSet:cs intoString:&line]) { 
     NSString *copy = [NSString stringWithString:line]; 
     [dict addObject:copy]; 

    } 
} 
NSArray *newArray = [[NSArray alloc] initWithArray:dict]; 

return newArray; 
} 

答えて

0

おそらくNSUTF8StringEncodingを使用することができますencodingパラメータの場合(ファイルの作成方法によって異なりますが、これが最も一般的です)。

NSScannerの代わりに、componentsSeparatedByString:メソッドを使用して文字列を行に分割することもできます。

NSString *file = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL]; 
return [file componentsSeparatedByString:@"\n"]; 

ところで、あなたは配列変数「辞書」、これはそれがNS(Mutable)Dictionaryだと暗示する名前を付けるべきではありません:これはあなたの方法にちょうどこの2行を削減します。

+0

エラーをnilまたはNULLに設定する大きな違いは何ですか? – NuGy

+0

そしてありがとう!これは奇妙な魅力のように機能します(NSURへの道を変えるかもしれません)。しかし、ありがとう!!!!!! – NuGy

+0

'nil'または' NULL'を使うことができます。これは主にスタイルの問題です。オブジェクト参照ではなくポインタを参照する場合は、 'NULL'を使用することをお勧めします。これは、パラメータが 'NSError *'ではなく 'NSError ** '型であることを明確にします。 – omz

0

単語のリストに取得するために以下のコードの方法は次のようになります。

NSString *path = [[NSBundle mainBundle] pathForResource:@"Words" ofType:@"plist"]; 
    NSArray *words = [[NSArray alloc] initWithContentsOfFile:path]; 

その後、あなただけですべての単語を持っていたplistを作成する必要がありますそれは配列としてのルートオブジェクトを持ちます。あなたが探しているエンコーディングの上に持っている方法では

NSUTF8StringEncodingであり、あなたが実際に何かがうまくいかない場合は、エラーが有用である可能性があり、参照することによりNSErrorを渡す必要があります。

NSError *anError = nil; 
NSString *file = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&anError]; 
+0

plistを作成する最も直接的な方法は何ですか? (私はそれらの経験があまりありません) – NuGy

+0

Xcodeで新しいファイルを作成すると、plistを作成するオプションがあります。 Xcode 3.xには、使用できるプロパティリストエディタアプリもありました。 Xcode 4では、ルートオブジェクトが配列になるようにするだけです。これを確認するには、ファイルをプレーンテキストで見て、最後の2つのタグが ''、次に ''であることを確認してください。 – theMikeSwan

関連する問題