我得到了一个具有特定格式的字符串,该字符串具有实体名称:@" Entry"。我无法修改字符串。如何访问字符串?我可以访问数组对象,但不能访问内部。如何使用initWithEntityName?
这是字符串
<__NSArrayI 0x7fe093f87160>(
<Entry: 0x600000498c90> (entity: Entry; id: 30506398-1852-433D-B536-DC57F484F754> ; data: {
cumulativeTime = 0000;
latitude = “12.972442”
longitude = "77.580643";
type = enrty;
entryName = Bangalore;
}),
<Entry: 0x600000498c90> (entity: Entry; id: 30506398-1852-433D-B536- DC57F484F754> ; data: {
cumulativeTime = 0000;
latitude = “13.067439”
longitude = "80.237617";
type = enrty;
entryName = Chennai;
})
这就是我获得数组的方式。
+(NSArray*) routePlan
{
NSString* jsonString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Documents/DataJson" withExtension:nil]
encoding:NSUTF8StringEncoding error:nil];
NSArray* array = [jsonString componentsSeparatedByString:@","];
}
我需要使用谓词吗?
我需要latitude和logtude的值。我可以做&#34; po array [0]&#34;,但不能进入数组[0]。
如果我尝试访问纬度,请获取以下错误。
error: Execution was interrupted, reason: Attempted to dereference an invalid ObjC Object or send it an unrecognized selector.
The process has been returned to the state before expression evaluation.
如果我做po array [0],我得到了以下内容。
<__NSArrayI 0x7fe093f87160>(
<Entry: 0x600000498c90> (entity: Entry; id: 30506398-1852-433D-B536-DC57F484F754> ; data: {
cumulativeTime = 0000;
latitude = “12.972442”
longitude = "77.580643";
type = enrty;
entryName = Bangalore;
})
答案 0 :(得分:0)
首先,您的文件不是json格式。 现在,当你这样做时:
NSString* aircraftJSONString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Documents/AircraftDataJson" withExtension:nil]
encoding:NSUTF8StringEncoding error:nil];
NSArray* aircraftJsonFplWaypoints = [aircraftJSONString componentsSeparatedByString:@","];
你实际上是用逗号分割你的文本,这就是你的aircraftJsonFplWaypoints包含2个对象的原因: 用值:
拳击一个字符串&lt; __ NSArrayI 0x7fe093f87160&gt;((实体:条目; id:30506398-1852-433D-B536-DC57F484F754&gt; ;数据:{cumulativeTime = 0000; latitude =“12.972442”经度=“77.580643”; type = enrty; entryName =班加罗尔; })
然后是一个值为
的字符串(entity:Entry; id:30506398-1852-433D-B536- DC57F484F754&GT; ;数据:{cumulativeTime = 0000; latitude =“13.067439” 经度=“80.237617”; type = enrty; entryName = Chennai; })
您在aircraftJsonFplWaypoints中拥有的是字符串,而不是字典或数组。这将导致你无处可去。
您需要做的是使用正则表达式来获取{}中的内容。这应该有效:
{[^}] *}
所以我会做类似的事情:
NSError * error;
NSString * pattern = @"\\{[^\\}]*\\}";
NSRegularExpression * regex = [[NSRegularExpression alloc] initWithPattern:pattern
options:0
error:&error];
NSArray<NSTextCheckingResult *> * matches = [regex matchesInString:aircraftJSONString options:NSMatchingReportCompletion range:NSMakeRange(0, aircraftJSONString.length)];
for(NSTextCheckingResult * match in matches)
{
NSString * substring = [aircraftJSONString substringWithRange:match.range];
// Remove the bracket
substring = [substring substringWithRange:NSMakeRange(1, substring.length - 2)];
// split around the ";" => get the llat/long
NSArray<NSString *>* parts = [substring componentsSeparatedByString:@";"];
NSString * latLong = parts[1];
/* continue to get the longitude and latitude */
}
}
但我建议使用标准输入,例如,而不是复制/粘贴po输出,你可以使用NSJSONSerialisation API将对象序列化为json,这将使存储/检索更容易。
答案 1 :(得分:0)
您从捆绑文件中获取的数据似乎不是有效的JSON,而是其他内容。如果它是JSON数据,那么下面将是获得它的方法。
Entry
但正如您所提到的,ManagedObject
为Entry
,这意味着您正在尝试从核心数据中获取数据。因此,请确认我如何保存和从coredata获取数据。 (提供示例代码)。
如果您认为自己的方法正确,请尝试打印 +(NSArray*) routePlan
{
NSString* jsonString = [NSString stringWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"Documents/DataJson" withExtension:nil]
encoding:NSUTF8StringEncoding error:nil];
NSArray* array = [jsonString componentsSeparatedByString:@","];
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger index, BOOL * _Nonnull stop)
{
Entry* entry = (Entry*)obj;
NSLog(@"id is :: %@",entry.id);
NSLog(@"id is :: %@",entry.data);
}];
return nil;
}
对象属性。
| name | email |
|---------------------|-------------------------|
| Arturo Vidal | arturo.vidal@usm.cl |
| Bastian Quezada | bastian@usm.cl |
| Javier Jeria | javier@usm.cl |
| Sebastian Piñera | sebastian@presidente.cl |
| Sebastian Gallardo | sebastian@usm.cl |