是啥导致了 NSInvalidArgumentException?
Posted
技术标签:
【中文标题】是啥导致了 NSInvalidArgumentException?【英文标题】:What is it that is causing the NSInvalidArgumentException?是什么导致了 NSInvalidArgumentException? 【发布时间】:2016-09-02 16:08:55 【问题描述】:我搜索了很多,但我找不到我做错了什么。我正在尝试获取存储在 Firebase 中的 2 个数字(使用 json 文件),然后创建谷歌地图标记,其中一个数字是纬度,另一个是经度。
__block int i =0;
while (i < 5)
i++;
NSString *url = [NSString stringWithFormat:@"---myfirebaseurl---", i];
Firebase *ref = [[Firebase alloc] initWithUrl:url];
[ref observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot)
if (snapshot.value == [NSNull null])
i = 5;
if (snapshot.value != [NSNull null])
NSString *latitudestring = snapshot.value[@"latitude"];
NSString *longitudestring = snapshot.value[@"longitude"];
long latitude = [latitudestring longLongValue];
long longitude = [longitudestring longLongValue];
NSLog(@"latitude: %li and longitude: %li", latitude, longitude);
CLLocationCoordinate2D position = CLLocationCoordinate2DMake(latitude, longitude);
GMSMarker *marker = [GMSMarker markerWithPosition:position];
marker.map = mapview;
marker.title = (@"%@", snapshot.value[@"nome"]);
marker.snippet = (@"%@", snapshot.value[@"endereco"]);
];
如果代码有点乱,请见谅。
出现此错误信息:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSTaggedPointerString objectForKeyedSubscript:]
根本没有创建谷歌地图标记。对此有何见解?
【问题讨论】:
您认为是NSDictionary
的对象实际上是NSString
。使用断点来了解究竟是哪一行导致了问题。
您可以发布您的 Firebase 结构的 sn-p 吗?请为文字,没有图像。这可能有助于深入了解错误。
它或多或少是一个地点列表,每个地点都有纬度、经度、名称(nome)和地址(endereco)。所以'places'分为'place 1','place 2'等。每个地方都有我所说的。就是这样。我不确定它是否足够清楚,但我想你明白我的意思
错误是明确的。这是一个众所周知的。如果您不向我们提供 snapshot.value
的真实结构或帮助我们指出确切导致问题的行(例如使用断点或 NSLog()
),我们将无法帮助您。
【参考方案1】:
我只是通过将 FEEventTypeChildAdded 更改为 FEEventTypeValue 找到了答案。我无法真正解释其中的原因,但至少它有效。
【讨论】:
以上是关于是啥导致了 NSInvalidArgumentException?的主要内容,如果未能解决你的问题,请参考以下文章