gpt4 book ai didi

objective-c - 将 CLLocation 保存到 plist

转载 作者:可可西里 更新时间:2023-11-01 05:31:34 25 4
gpt4 key购买 nike

我正在努力将几个位置保存到一个 plist 文件中以备后用,经过一番谷歌搜索后,我发现 CLLocation 数组本身无法保存,所以我想知道一种方法。

我正在考虑几个类来将单个 CLLocation 对象“序列化”/“反序列化”到 NSDictionary 中,然后将这些 NSDictionaries 的数组存储到 plist 文件中,但我想知道是否有更好的/实现这一目标的更智能/可靠的方式。

提前致谢。

编辑:

这是我用来将数据保存在 plist 中的函数(c_propertyName 从答案中获取代码)

    - (void) addLocation {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"/Locations.plist"];

NSArray *keys = [curLocation c_propertyNames];
NSDictionary *dict = [curLocation dictionaryWithValuesForKeys:keys];

[dict writeToFile: path atomically:YES];
}

编辑 2 — 解决方案:

好的,我已经弄明白了。在下方,我针对自己的问题发布了一个有两个选项的解决方案。

最佳答案

使用 KVC 非常简单。

下面是NSObject类获取属性名的方法(需要<objc/runtime.h>)

- (NSArray *)c_propertyNames {
Class class = [self class];
u_int count = 0;

objc_property_t *properties = class_copyPropertyList(class, &count);
if (count <= 0) {
return nil;
}
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, count)];

NSMutableSet *retVal = [NSMutableSet setWithCapacity:count];
[set enumerateIndexesWithOptions:NSEnumerationConcurrent
usingBlock:^(NSUInteger idx, BOOL *stop) {
const char *propName = property_getName(properties[idx]);
NSString *name = [NSString stringWithUTF8String:propName];
[retVal addObject:name];
}];
return [retVal allObjects];
}

然后像这样使用它:

NSArray *keys = [yourLocation c_propertyNames];
NSDictionary *dict = [yourLocation dictionaryWithValuesForKeys:keys];

然后保存那个字典。

关于objective-c - 将 CLLocation 保存到 plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10228348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com