title: My IAP isn't working. Bugs at func Paymentqueue
body: <p>When I click on either of my IAPS, a message appears saying the IAP was already purchased  (which is not the case) and will be restored for free, then nothing happens, the IAP doesn't execute.</p>
  
  <p>Here is what I get in my console:</p>
  
  <pre><code>No Value.
  IAP is enabled, loading...
  
  true
  Product Request
  Product Added
  IAP id
  Remove Ads
  Removes ads from the app.
  2
  Buy: IAP id
  Add Payment
  nil
  default: Error
  </code></pre>
  
  <p>Here is my code:</p>
  
  <p>GameViewController.Swift</p>
  
  <pre><code>import UIKit
  import StoreKit
  
  
  class GameViewController: UIViewController, ADBannerViewDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver, GKGameCenterControllerDelegate,GADBannerViewDelegate{
  
  
      @IBOutlet var outRemoveAds: UIButton!
      @IBOutlet var outRestorePurchases: UIButton!
  
  
      override func viewDidLoad() {
          super.viewDidLoad()
      }
  
      override func viewWillAppear(animated: Bool) {
          super.viewWillAppear(animated)
  
          if NSUserDefaults.standardUserDefaults().objectForKey("val") != nil {
              print("Has a value.")
              banner.removeFromSuperview()
              bannerGoogle.removeFromSuperview()
              outRemoveAds.removeFromSuperview()
              outRestorePurchases.removeFromSuperview()
              removeInterFrom = 1
          }
          else {
              print("No Value.")
          }
  
          if(SKPaymentQueue.canMakePayments()){
              print("IAP is enabled, loading...")
              let productID:NSSet = NSSet(objects:"IAP id")
              let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set&lt;String&gt;)
              request.delegate = self
              request.start()
          }
          else{
              print("Please enable IAPS")
  
          }
  
      }
  
  
      //IAP Ads
  
      @IBAction func removeAds(sender: UIButton) {
          for product in list{
              let prodID = product.productIdentifier
              if (prodID == "IAP id"){
                  p = product
                  buyProduct()
                  break
              }
          }
      }
      @IBAction func restorePurchases(sender: UIButton) {
          SKPaymentQueue.defaultQueue().addTransactionObserver(self)
          SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
      }
  
  
      //IAP Functions
  
      var list = [SKProduct]()
      var p = SKProduct()
  
      func removeAds(){
          banner.removeFromSuperview()
          bannerGoogle.removeFromSuperview()
          outRemoveAds.removeFromSuperview()
          outRestorePurchases.removeFromSuperview()
          let theValue = 10
          NSUserDefaults.standardUserDefaults().setObject(theValue, forKey: "val")
          NSUserDefaults.standardUserDefaults().synchronize()
      }
  
      func buyProduct(){
          print("Buy: "+p.productIdentifier)
          let pay = SKPayment (product: p)
          SKPaymentQueue.defaultQueue().addTransactionObserver(self)
          SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
      }
  
      func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
          print("Product Request")
          let myProduct = response.products
  
          for product in myProduct{
              print("Product Added")
              print(product.productIdentifier)
              print(product.localizedTitle)
              print(product.localizedDescription)
              print(product.price)
  
              list.append(product as SKProduct)
          }
      }
  
      func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
          print("Add Payment")
  
          for transaction:AnyObject in transactions{
              let trans = transaction as! SKPaymentTransaction
              print(trans.error)
              switch trans.transactionState{
              case .Purchased:
                  print("IAP unlocked")
                  print(p.productIdentifier)
  
                  let prodID = p.productIdentifier as String
                  switch prodID{
                  case "IAP id":
                      print("Remove Ads")
                      removeAds()
                  default:
                      print("IAP not setup")
                  }
                  queue.finishTransaction(trans)
                  break
              case .Failed:
                  print ("Buy error")
                  queue.finishTransaction(trans)
                  break
              default:
                  print("default: Error")
                  break
              }
          }
      }
  
      func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
          print("Purchases Restored")
  
          _ = []
          for transaction in queue.transactions {
              let t: SKPaymentTransaction = transaction as SKPaymentTransaction
  
              let prodID = t.payment.productIdentifier as String
              switch prodID{
              case "IAP id":
                  print("Remove Ads")
                  removeAds()
              default:
                  print("IAP not setup")
              }
  
  
          }
      }
      func finishTransaction(trans:SKPaymentTransaction){
          print("Finshed Transaction")
      }
  
      func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
          print("Remove Transaction")
      }
  }
  </code></pre>
  
  <p>MenuViewController.swift</p>
  
  <pre><code>import UIKit
  import StoreKit
  import Social
  
  
  
  
  class MenuViewController: UIViewController, SKProductsRequestDelegate,SKPaymentTransactionObserver {
  
      @IBOutlet var outRestart: UIButton!
      @IBOutlet var outBuy: UIButton!
  
  
  
      override func viewDidLoad() {
          super.viewDidLoad()
  
      }
  
      override func viewWillAppear(animated: Bool) {
          super.viewWillAppear(animated)
  
  
          if(SKPaymentQueue.canMakePayments()){
              print("IAP is enabled, loading...")
              let productID:NSSet = NSSet(objects:"IAP id")
              let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set&lt;String&gt;)
              request.delegate = self
              request.start()
          }
          else{
              print("Please enable IAPS")
  
          }
  
      }
  
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
  
      @IBAction func buy(sender: UIButton) {
          for product in list{
              let prodID = product.productIdentifier
              if (prodID == "IAP id"){
                  p = product
                  buyProduct()
                  break
              }
          }
  
      }
  
      //IAP Functions
  
      var list = [SKProduct]()
      var p = SKProduct()
  
      func keepOn(){
          buyornot = 1
          Back()
      }
  
      func buyProduct(){
          print("Buy: "+p.productIdentifier)
          let pay = SKPayment (product: p)
          SKPaymentQueue.defaultQueue().addTransactionObserver(self)
          SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
      }
  
      func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
          print("Product Request")
          let myProduct = response.products
  
          for product in myProduct{
              print("Product Added")
              print(product.productIdentifier)
              print(product.localizedTitle)
              print(product.localizedDescription)
              print(product.price)
  
              list.append(product as SKProduct)
          }
      }
  
      func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
          print("Add Payment")
  
          for transaction:AnyObject in transactions{
              let trans = transaction as! SKPaymentTransaction
              print(trans.error)
              switch trans.transactionState{
              case .Purchased:
                  print("IAP unlocked")
                  print(p.productIdentifier)
  
                  let prodID = p.productIdentifier as String
                  switch prodID{
                  case "IAP id":
                      print("Keep on")
                      keepOn()
                  default:
                      print("IAP not setup")
                  }
                  queue.finishTransaction(trans)
                  break
              case .Failed:
                  print ("Buy error")
                  queue.finishTransaction(trans)
                  break
              default:
                  print("default: Error")
                  break
              }
          }
      }
  
      func finishTransaction(trans:SKPaymentTransaction){
          print("Finshed Transaction")
      }
  
      func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction]) {
          print("Remove Transaction")
      }
  </code></pre>