Xcode 分析Facebook Graph API对象时发生Swift错误:EXC_BAD_指令(代码=EXC_I386_INVOP)

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

我试图获取Facebook群组信息,但遇到了一个不知道如何修复的错误

当我尝试访问组提要的单个项时,我将一个提要从AnyObject强制转换为FBGraphObject,这就是错误发生的地方

错误显示为“线程1:EXC\U BAD\U指令(代码=EXC\U I386\U INVOP,子代码=0x0)”

我尝试执行nil检查,并检查对象的类型以防止出现错误,但没有解决问题

有什么建议吗?有什么问题吗

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上使用全新语言时,应小心不要盲目相信该工具