2016-05-25 28 views
-1

私はデータクラスとして実行する必要がある私のアプリで2つのクラスを書いた。 1つはユーザーの詳細用で、もう1つは製品用です。 両方のクラスは、名前と変数が異なる同じコードです。 製品クラスは正常に動作しますが、ユーザークラスはsharedInstanceを作成しません。 JsonはデータをOKにして印刷することができます。ここ1つのswift 2アプリケーションでシングルトンのカップル

は私のコードです:

import UIKit 
import Alamofire 
import SwiftyJSON 

class userDetailsDataClass { 
    let defaults = NSUserDefaults.standardUserDefaults() 
    var user: [SwiftyJSON.JSON] = [] 



    init() { 
     let baseUrlString = "http://example.com/ios/login.php?" 
     let parameters = [String:String]() 

     let urlSignup = baseUrlString + "id=" + defaults.stringForKey("userID")! + "&macnumber=" + defaults.stringForKey("currentUUID")! 

     //Encode url to solve spaces issues 
     let urlwithPercentEscapes = urlSignup.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
     print(urlwithPercentEscapes) 
     Alamofire.request(.GET, urlwithPercentEscapes, parameters: parameters).responseJSON { response in 
      if response.result.isSuccess { 
       let json = JSON(response.result.value!) 
       let data = json.arrayValue 
       print(json) 


       if json["error"] == "wrongmac" { 
        print("wrong mac") 

       } else { 

        let macFromDb = json["macnumber"] 
        self.defaults.setValue(String(macFromDb), forKey: "macFromDb") 

        userDetailsDataClass.sharedInstance.user = data 


        print(String(userDetailsDataClass.sharedInstance.user.count)+"user count from alamo ") 


       } 

      } 

      let nc = NSNotificationCenter.defaultCenter() 
      nc.postNotificationName("userDataReadyForSplash", object: nil) 


     } 


    } 



    //Create one class for shared Instance 
    struct Static { 
     static var onceToken : dispatch_once_t = 0 
     static var instance : userDetailsDataClass? = nil 
    } 

    class var sharedInstance : userDetailsDataClass { 
     dispatch_once(&Static.onceToken){ 
      Static.instance = userDetailsDataClass() 
     } 
     return Static.instance! 
    } 
} 
+1

できるだけシングルトンを使用しないでください。あなたができない場合は、以下のようにそれらを実際のシングルトンにしてください:http://stackoverflow.com/a/36012158/2227743 – Moritz

答えて

0

シングルトンは(とクラス名の最初の文字の大文字を入れて下さい)クラスではなくサブクラスとして直接定義する必要があります。

class UserDetailsDataClass { 
    static let sharedInstance = UserDetailsDataClass() 

    let defaults = NSUserDefaults.standardUserDefaults() 
    var user: [SwiftyJSON.JSON] = [] 


    init() { 
     let baseUrlString = "http://example.com/ios/login.php?" 
     let parameters = [String:String]() 

     let urlSignup = baseUrlString + "id=" + defaults.stringForKey("userID")! + "&macnumber=" + defaults.stringForKey("currentUUID")! 

     //Encode url to solve spaces issues 
     let urlwithPercentEscapes = urlSignup.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
     print(urlwithPercentEscapes) 
     Alamofire.request(.GET, urlwithPercentEscapes, parameters: parameters).responseJSON { response in 
      if response.result.isSuccess { 
       let json = JSON(response.result.value!) 
       let data = json.arrayValue 
       print(json) 


       if json["error"] == "wrongmac" { 
        print("wrong mac") 

       } else { 

        let macFromDb = json["macnumber"] 
        self.defaults.setValue(String(macFromDb), forKey: "macFromDb") 

        UserDetailsDataClass.sharedInstance.user = data 

        // ADDITION: Try to print the whole SwiftyJSON array and see the result 
        print(UserDetailsDataClass.sharedInstance.user) 

        print(String(userDetailsDataClass.sharedInstance.user.count)+"user count from alamo ") 
       } 
      } 

      let nc = NSNotificationCenter.defaultCenter() 
      nc.postNotificationName("userDataReadyForSplash", object: nil) 
     } 
    } 
} 
+0

私は少し混乱しました。あなたは私のコードを編集してここに投稿してください。そうすれば、コードが表示され、わかりますか? –

+0

私は自分の答えを編集しました。これを試して、設定した後に 'print(UserDetailsDataClass.sharedInstance.user)'を実行したときに何が表示されているのかを見てください。 – Artheyn

+0

こんにちは、尋問のためのtnx :)私はあなたのコードを試して、私はexaxtlly同じ結果を得る。それは正しく作成しないでください。私はuserDetailsDataClass.sharedInstance.user.countを試してみる0 –

関連する問題