所以对我正在做的事情的一般见解是实现登录和注销到Facebook并检索个人资料图片,名称,ID。
登录过程并检索信息正在运行但我的问题在于我尝试注销时。我主要有具有注销按钮的ExploreViewController,而MeViewController是我调用的功能,用于设置显示其他信息的标签
ExploreViewController:
@IBOutlet weak var LogoutButton: UIButton!
@IBAction func LogoutButtonClicked(sender: AnyObject!)
{
let me = MeViewController()
me.releseObjects()
}
我成功地召集了IBAction
MeViewController:
@IBOutlet weak var idlable: UILabel!
@IBOutlet weak var firstName: UILabel!
@IBOutlet weak var imgProfile: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
if((FBSDKAccessToken.currentAccessToken()) != nil)
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name,id,email"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
}
else
{
let userName : NSString = result.valueForKey("name") as! NSString
let userid : NSString = result.valueForKey("id") as! NSString
self.firstName.text=userName as String
self.idlable.text=userid as String
let accessToken = FBSDKAccessToken.currentAccessToken().tokenString
let url = NSURL(string: "https://graph.facebook.com/me/picture?type=large&return_ssl_resources=1&access_token="+accessToken)
_ = NSURLRequest(URL: url!)
let data=NSData(contentsOfURL: url!)
// Display the imag
let image = UIImage(data: data!)
self.imgProfile.image = image
}
})
}
func releseObjects(){
let fn = "lolololol"
self.firstName.text = fn //getting the error here
}
我成功将firstName Label设置为我在viewDidLoad()中从Facebook获得的用户名,我的问题是当我调用函数releaseObjects()
时我无法更改标签的内容答案 0 :(得分:0)
您正在此处MeViewController
创建新实例,这是崩溃的原因。
//ExploreViewController:
@IBOutlet weak var LogoutButton: UIButton!
@IBAction func LogoutButtonClicked(sender: AnyObject!)
{
let me = MeViewController()
me.releseObjects()
}
更好地实施delegate/callbackHandler/Notification
赞。
//MeViewController
override func viewDidLoad() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "releseObjects", name: "Logout", object: nil)
}
func releseObjects(){
self.firstName.text = "lolololol"
}
ExploreViewController
@IBAction func LogoutButtonClicked(sender: AnyObject!){
NSNotificationCenter.defaultCenter().postNotificationName("Logout", object: nil)
}
答案 1 :(得分:0)
问题是您是从MeViewController
创建ExploreViewController
的新实例并尝试调用releseObjects
方法:
let me = MeViewController()
me.releseObjects()
它是一个新对象,而不是您之前使用过的对象。由于没有出现,出口没有连接(它是零)。当您尝试访问firstName
标签时,它肯定会崩溃。
我建议您重新使用MeViewController
的实际对象,而不是创建新对象。