在 iOS 应用程序中加载静态对象的最佳方式是什么?
What is the best way to load static objects in an iOS app?
我有大约 100 个地址的列表。我想使用 CLGeocoder Class
和 geocodeAddressDictionary 或 geocodeAddressString 方法来获取每个地址的 CLPlacemarks 列表。我不希望该应用程序每次启动时都执行此操作(因为地址永远不会改变并且它需要互联网)。我如何静态存储每次应用程序启动时要加载的 100 个 CLPlacemark 对象的列表?
我建议:
将应用程序包中的列表存储为 .plist 文件或 JSON 文件,然后可以在启动时将其解析为静态 NSDictionary 或作为 Singleton 对象的实例变量。
首先将您的 100 个地址序列化为一个 JSON 文件。您可以尝试使用一些在线工具,例如:http://www.objgen.com/json
获得文本 JSON 文件后,将文件拖到 Xcode 中的项目中。然后您可以使用以下方法解析它:
NSError *error;
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Addresses" ofType:@"json"];
NSURL *localFileURL = [NSURL fileURLWithPath:filePath];
NSData *contentOfLocalFile = [NSData dataWithContentsOfURL:localFileURL];
NSDictionary *addresses = [NSJSONSerialization JSONObjectWithData:contentOfLocalFile
options: NSJSONReadingMutableContainers
error:&error];
您可以使用相同的方法反序列化 PLIST 文件。
我有大约 100 个地址的列表。我想使用 CLGeocoder Class 和 geocodeAddressDictionary 或 geocodeAddressString 方法来获取每个地址的 CLPlacemarks 列表。我不希望该应用程序每次启动时都执行此操作(因为地址永远不会改变并且它需要互联网)。我如何静态存储每次应用程序启动时要加载的 100 个 CLPlacemark 对象的列表?
我建议:
将应用程序包中的列表存储为 .plist 文件或 JSON 文件,然后可以在启动时将其解析为静态 NSDictionary 或作为 Singleton 对象的实例变量。
首先将您的 100 个地址序列化为一个 JSON 文件。您可以尝试使用一些在线工具,例如:http://www.objgen.com/json
获得文本 JSON 文件后,将文件拖到 Xcode 中的项目中。然后您可以使用以下方法解析它:
NSError *error;
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Addresses" ofType:@"json"];
NSURL *localFileURL = [NSURL fileURLWithPath:filePath];
NSData *contentOfLocalFile = [NSData dataWithContentsOfURL:localFileURL];
NSDictionary *addresses = [NSJSONSerialization JSONObjectWithData:contentOfLocalFile
options: NSJSONReadingMutableContainers
error:&error];
您可以使用相同的方法反序列化 PLIST 文件。