1

ファイルのロードに成功しました:

現時点でこれがあるとしましょう:

マップ1

マップ2

文字列を取得するコードは次のとおりです。

NSURL *fileURL=[NSURL fileURLWithPath:@"/Users/Maze.txt"];

NSString *contents =[NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
NSArray *lines = [[NSArray alloc]init];
lines= [contents componentsSeparatedByString:@"\n"];
for (NSString *s in lines){
    NSLog(@"The content is: %@ \n", s);
}

ただし、これらの文字列に基づいてオブジェクトを作成するにはどうすればよいですか? 既にマップ クラスがあり、そのテキスト ファイルのデータに基づいてオブジェクトを作成したいとします。これで、Map1 と Map2 の 2 つのオブジェクトが作成されます。NSString をオブジェクト名として使用することはできますか?

ありがとう..

4

2 に答える 2

0

NSDictionary は、ファイルから読み取るための同様の方法を提供します: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDictionary_Class/Reference/Reference.html NSArray についても、同様の方法を取得できますメソッド: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

于 2012-11-05T05:23:30.790 に答える
0

次のような Map クラスがあるとします。

@interface Map : NSObject
@property ( nonatomic, strong ) NSString * name ;
@property ( nonatomic, strong ) NSNumber * latitude ;
@property ( nonatomic, strong ) NSNumber * longitude ;
@end

次のような JSON ファイルがあるとします。

[
    { "name":"Map1"; "latitude":41.881944; "longitude":-87.627778 },
    { "name":"Map2"; "latitude":48.8567; "longitude":2.3508 },
]

次のように 2 つの Map インスタンスを取得できます。

NSArray * CreateMapsWithContentsOfFileAtURL( NSURL * url )
{
    NSData * data = [ NSData dataWithContentsOfURL:fileURL ] ;
    NSError * error = nil ;
    NSArray * array = [ NSJSONSerialization JSONObjectWithData:data options:0 error:&error ] ;
    NSArray * maps = [ array collect:^(NSDictionary * dict){
        Map * map = [ [ Map alloc ] init ] ;
        [ map setValuesForKeysWithDictionary:dict ] ;
        return map ;
    }] ;
    return maps ;
}

-[NSArray collect:]によって提供される場所

@implementation NSArray (Collect)

-(NSArray*)collect:(id (^)(id object))block
{
    if ( !block ) { return nil ; }
    NSMutableArray * result = [ NSMutableArray array ] ;
    for( id object in self )
    {
        id newObject = block( object ) ;
        if ( newObject ) { [ result addObject:newObject ] ; }
    }
    return result ;
}

@end
于 2012-11-05T05:23:41.767 に答える