2015-09-29 45 views
0

由于升级到Xcode7,我收到以下错误:斯威夫特 - 无法调用初始化类型“的NSDictionary”

Cannot invoke initializer for type 'NSDictionary' with an argument list of type '(objects: [AnyObject!], forKeys: [String])' 

在这行代码:

self.sessionBids!.addObject(NSDictionary(objects: [PFUser.currentUser().objectId, PFUser.currentUser().objectForKey("username"), self.bidTextField.text], forKeys: ["user", "name", "bid"])) 

有人能解释为什么吗?

编辑:这里是代码的完整块

if(self.bidTextField.text!.rangeOfString("^[0-9]*$", options: .RegularExpressionSearch) != nil) { 
        self.sessionBids = array[0].objectForKey("bids") as? NSMutableArray 
        var lastSessionBid : NSDictionary 
        SVProgressHUD.showProgress(50) 
        var previousHighBid : Int! = 0 
        if(self.sessionBids == nil) { 
         self.sessionBids = NSMutableArray() 

        } else { 
         lastSessionBid = self.sessionBids.objectAtIndex(self.sessionBids.count - 1) as! NSDictionary 
         previousHighBid = Int(lastSessionBid.objectForKey("bid") as! String) 
        } 

        if(previousHighBid >= Int(self.bidTextField.text!)) { 
         print("bid is lower than current bid") 
         SVProgressHUD.showErrorWithStatus("Bid is lower than current bid!") 
         return 

        } else { 

         self.sessionBids!.addObject(NSDictionary(objects: [PFUser.currentUser().objectId, PFUser.currentUser().objectForKey("username"), self.bidTextField.text], forKeys: ["user", "name", "bid"])) 
         SVProgressHUD.showProgress(75) 
         self.session.setObject(self.sessionBids, forKey: "bids") 
         self.session.save() 
         self.keyboardShowing = false 
         self.reloadSessionBids() 
         SVProgressHUD.showProgress(100) 
         SVProgressHUD.showSuccessWithStatus("Successfully Added Bid") 
        } 

       } else { 
        SVProgressHUD.showErrorWithStatus("Bid must be a number!") 
       } 
+0

请显示一些关于'PFUser'。 –

回答

0

两个物体和字典的键不能为nil
确保所有对象都是非可选项。

+0

如果你能够给出一些更详细的建议,我已经发布了我的完整代码块:) –

+0

至少在初始化行中展开'self.bidTextField.text!',并且如果它们可能是其他对象'nil' – vadian

0

尝试调用的NSDictionary的 public init(objects: UnsafePointer<AnyObject?>, forKeys keys: UnsafePointer<NSCopying?>, count cnt: Int)代替:

self.sessionBids!.addObject(NSDictionary(objects: [PFUser.currentUser().objectId, PFUser.currentUser().objectForKey("username"), self.bidTextField.text], forKeys: ["user", "name", "bid"], count: 3)) 

或者,尝试使用本地字典,而不是一个NSDictionary。

说:

var bidDict = [String : AnyObject]() 
bid["user"] = PFUser.currentUser().objectId ?? "unknown" 
bid["name"] = PFUser.currentUser().objectForKey("username") ?? "unknown" 
bid["bid"] = self.bidTextField.text ?? "unknown" 

然后插入到你的数组:

self.sessionBids!.addObject(bid) 
1

你试图调用init(objects: [AnyObject], forKeys keys: [NSCopying])初始化的NSDictionary的。 对象:[AnyObject]不能包含可选项(根据其声明),并且似乎PFUser.currentUser().objectIdPFUser.currentUser().objectForKey("username"),self.bidTextField.text都是可选项,这就是为什么你会收到错误。

要解决这个问题,正如vadian建议的那样,您需要展开该数组中的所有可选项。