【问题标题】:objective-c creating an object from a text fileObjective-c 从文本文件创建对象
【发布时间】:2023-04-02 08:47:01
【问题描述】:

我刚刚成功加载了一个文件:

假设它现在有这个:

地图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);
}

但是,我只想问,如何根据这些字符串创建对象? 假设我已经有一个地图类,并且我想根据该文本文件上的数据创建一个对象,所以现在我将有 2 个对象,Map1 和 Map2.. 是否可以使用 NSString 作为对象名称?

谢谢..

【问题讨论】:

  • 你想把 NSString 转换成这样的类吗:NSClassFromString(@"NSButton")

标签: objective-c cocoa object text nsstring


【解决方案1】:
【解决方案2】:

假设你有一个这样的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2021-06-26
    • 1970-01-01
    • 2016-05-25
    • 2010-12-14
    • 1970-01-01
    • 2015-05-15
    • 2015-09-30
    相关资源
    最近更新 更多