Xcode 分析Facebook Graph API对象时发生Swift错误:EXC_BAD_指令(代码=EXC_I386_INVOP)
我试图获取Facebook群组信息,但遇到了一个不知道如何修复的错误 当我尝试访问组提要的单个项时,我将一个提要从AnyObject强制转换为FBGraphObject,这就是错误发生的地方 错误显示为“线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)” 我尝试执行nil检查,并检查对象的类型以防止出现错误,但没有解决问题 有什么建议吗?有什么问题吗Xcode 分析Facebook Graph API对象时发生Swift错误:EXC_BAD_指令(代码=EXC_I386_INVOP),xcode,facebook-graph-api,swift,Xcode,Facebook Graph Api,Swift,我试图获取Facebook群组信息,但遇到了一个不知道如何修复的错误 当我尝试访问组提要的单个项时,我将一个提要从AnyObject强制转换为FBGraphObject,这就是错误发生的地方 错误显示为“线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)” 我尝试执行nil检查,并检查对象的类型以防止出现错误,但没有解决问题 有什么建议吗?有什么问题吗 func fetchFacebookGroup() { FBRequestConnecti
func fetchFacebookGroup() {
FBRequestConnection.startWithGraphPath("/\(groupId)/?fields=feed", completionHandler: {(connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
if result? {
NSLog("error = \(error)")
var jsonFeeds = result as FBGraphObject
self.feeds = self.buildFeeds((jsonFeeds["feed"] as FBGraphObject)["data"] as NSMutableArray)
self.tableView.reloadData()
}
} as FBRequestHandler)
}
func buildFeeds(data: NSMutableArray) -> Array<GroupFeed> {
var result : Array<GroupFeed> = []
for rawFeed : AnyObject in data {
if rawFeed is FBGraphObject { // This is where error pops up.
if let jsonFeed = rawFeed as? FBGraphObject {
var feed = GroupFeed(id: jsonFeed["id"] as String, name: (jsonFeed["from"] as FBGraphObject)["name"] as String, message: jsonFeed["message"] as String, updatedTime: jsonFeed["updated_time"] as String)
result.append(feed)
}
}
}
return result
}
func fetchFacebookGroup(){
FBRequestConnection.startWithGraphPath(“/\(groupId)/?fields=feed”,completionHandler:{(连接:FBRequestConnection!,结果:AnyObject!,错误:NSError!)->在中无效
结果如何{
NSLog(“错误=\(错误)”)
var jsonFeeds=结果为FBGraphObject
self.feeds=self.buildFeeds((jsonFeeds[“feed”]作为FBGraphObject)[“data”]作为NSMutableArray)
self.tableView.reloadData()
}
}作为FBRequestHandler)
}
func buildFeeds(数据:NSMutableArray)->Array{
变量结果:数组=[]
对于rawFeed:数据中的任何对象{
如果rawFeed是FBGraphObject{//,则会弹出错误。
如果让jsonFeed=rawFeed作为?FBGraphObject{
var feed=GroupFeed(id:jsonFeed[“id”]作为字符串,name:(jsonFeed[“from”]作为FBGraphObject)[“name”]作为字符串,message:jsonFeed[“message”]作为字符串,updatedTime:jsonFeed[“updated_time”]作为字符串)
结果。追加(提要)
}
}
}
返回结果
}
我修复了这个问题,在解析API调用返回的FBGraphObject时更加小心。
事实证明,我错误地假设此API返回的所有组提要都包含“message”作为密钥
因此,我的代码的固定版本如下所示:
TableViewController.swift
func fetchFacebookGroup() {
FBRequestConnection.startWithGraphPath("\(groupId)/?fields=feed.limit=(1)", completionHandler: {(connection: FBRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
if result? {
NSLog("error = \(error)")
var jsonFeeds = result as FBGraphObject
self.feeds = self.buildFeeds((jsonFeeds["feed"] as FBGraphObject)["data"] as NSMutableArray)
self.tableView.reloadData()
}
} as FBRequestHandler)
}
func buildFeeds(data: NSMutableArray) -> Array<GroupFeed> {
var result : Array<GroupFeed> = []
for rawFeed : AnyObject in data {
if rawFeed is FBGraphObject {
if let jsonFeed = rawFeed as? FBGraphObject {
var feed = GroupFeed(jsonFeed: jsonFeed)
result += feed
}
}
}
return result
}
class GroupFeed: NSObject {
var id : String!
var name : String!
var message : String?
var updatedTime : String!
init(jsonFeed: FBGraphObject) {
self.id = jsonFeed["id"] as String
self.name = (jsonFeed["from"] as FBGraphObject)["name"] as String
if let message = jsonFeed.objectForKey("message") as? String {
self.message = message
}
self.updatedTime = jsonFeed["updated_time"] as String
}
}
因此,我在这里的教训是,我不应该太依赖XCode调试器的能力来精确定位错误的确切来源
我不知道这是因为XCode6仍处于测试阶段,还是因为它只是测试阶段,但在测试版IDE上使用全新语言时,应小心不要盲目相信该工具