我刚刚成功加载了一个文件:
让我们说它现在有这个:
地图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);
}
但是,我只是想问,如何根据这些字符串创建对象? 让我们说我已经有了一个map类,我想根据该文本文件中的数据创建一个对象,所以现在我将有2个对象,Map1和Map2 ..是否可以使用NSString作为对象名称?
谢谢..
答案 0 :(得分: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
答案 1 :(得分: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