2016-04-24 70 views
0

我已經聲明瞭一個全局變量'var recipes = String:PFFile'。 在parse.com上,我創建了一個名爲「recipe」的類型爲File的列,並且我已經上傳了包含食譜的.txt文件。 我想從解析到UITextView加載.txt文件的內容。 我已經嘗試了很多事情,這是我所:無法在UITextView中顯示正確的文件swift

var recipes = [String: PFFile]() 
var valueToPass: String! 
var valuePassed: String! 
var appetizer = [String]() 

var images = [String: UIImage]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let query = PFQuery(className: "Appetizers") 
    query.orderByAscending("recipe") 
    query.findObjectsInBackgroundWithBlock { (objects, error) in 

     guard error == nil, let objects = objects else { 
      print(error) 
      return 
     } 

     for object in objects { 

      // ... Appetizer Name 

      let appetizerName = object.objectForKey("appetizer") as! String 
      self.name.text = self.valuePassed 

      // ... Recipe 

      var recipes = [String: String]() 

      let recipeFile = object["recipe"] as! PFFile 

      do { 

       let recipeData = try recipeFile.getData() 
       let recipe = String(data: recipeData , encoding:NSUTF8StringEncoding)! 
       print(recipe) // recipe is now a string you can store or display 

       self.myTextView.text = recipe 

      } catch { 
       print("something went wrong") 
      } 


      // ... Image 

      let imageFile = object["imageFiles"] as!PFFile 
      imageFile.getDataInBackgroundWithBlock({ (imageData, error) -> Void in 

       if error == nil { 

        let data = imageData 

       } else { 

        print(error) 

       } 

       if let data = imageData { 

        self.images[appetizerName] = UIImage(data: data) 
        self.imageView.image = self.images[self.valuePassed] 

       } 
      }) 

     } 

    } 

} 

我能與上面的代碼,但不是我選擇顯示的配方。它以日誌順序打印日誌中的所有配方(但每次都是相同的順序),最後一個是在UITextView中打印的配方。

我似乎無法得到我選擇的那個。

+0

,請複製粘貼你的代碼而不是屏幕截圖。你不顯示這段代碼的上下文 - 你是如何得到'object'的? – Paulw11

+2

這是因爲有更多的一個配方返回解析,並在一個for循環,你將配方設置爲相同的文本字段,所以它將永遠是最後一個將被設置在最後。你在哪裏選擇食譜,以及如何在使用查詢解析時過濾它? –

+0

查詢按升序排序,'valuePassed'是正在選擇的查詢。 – LizG

回答

1

您可以創建一個[string: PFFile]類型的字典recipes。據推測這是爲了包含由Parse返回的所有食譜。那麼你永遠不會填充該字典。

在後面的代碼下來你有這樣一行:

let recipeFile = object["recipe"] as! PFFile 

這就是你想要的PFFile添加到您的字典嗎?

如果是這樣,那麼你可以使用這樣的代碼:

let someKey = //Whatever string key you want to use to store a recipe 
recipes[someKey] = recipeFile 

你說

所以,你「我試圖從parse加載.txt文件的內容一個UITextView。」試圖將所有文本文件的組合內容添加到一個UITextView

在這種情況下,你需要改變這一行:

let recipe = String(data: recipeData , encoding:NSUTF8StringEncoding)! 

說你創建一個新變種:

VAR allRecipesText =字符串()

然後,你可以在下面添加一行將食譜轉換爲字符串的線:

let recipe = String(data: recipeData , encoding:NSUTF8StringEncoding)! 
//concatenate the new recipe string to the end of allRecipiesText 
allRecipiesText += recipe 

您是否真的需要保存PFFile對象,還是要保存轉換後的文本?你真的想要你的食譜在字典中,或者你想讓他們在一個數組?

+0

感謝您的回答@Duncan C.我從一個名爲「Appetizers」的tableviewcontroller中選擇一行,並將其引導至此viewController。我想要做的是從我選擇的行,我想顯示圖像,配方的名稱,然後配方本身(對於選定的項目)顯示在名爲'myTextView.text'的UITextView中 – LizG

+0

好吧,那麼你應該建立一個數組,其中包含帶有配方名稱,圖像和配方文本的結構。修改調用Parse的代碼,以便在for循環中創建這樣一個數組。然後,當用戶點擊一個單元格時,使用行號索引到您的數組,並將該結構傳遞給此視圖控制器,這將顯示信息。 –

+0

不知道如何使用結構,但我迄今爲止所做的工作與圖像和文本,只是沒有拉文本視圖的正確配方。我使用'valuePassed'作爲從tableview中選擇的行,似乎在工作,除了在表格視圖的情況下 – LizG

0

有了這個代碼,我能顯示我選擇了在前面tableviewcontroller配方:

let recipeFile = object["recipe"] as! PFFile 


      do { 

       let recipeData = try recipeFile.getData() 
       let recipe = String(data: recipeData , encoding:NSUTF8StringEncoding)! 
       // recipe is now a string you can store or display 

       self.recipes[appetizerName] = recipe 
       self.myTextView.text = self.recipes[self.valuePassed] 

      } catch { 

       print("something went wrong") 
      } 

appetizerName:作爲開胃菜的名字 valuePassed:選擇配方中的tableview控制器