2016-05-25 2 views
0

Я пытаюсь создать любимую кнопку на CollectionViewCell для сохранения элементов в списке избранных. Когда я постучал по любимой кнопке значка, он успешно добавляет выбранный элемент ячейки в массив избранного списка, а также отображается в списке избранного. Когда я постучал по любимой кнопке, измените ее изображение в соответствии со значениями, которые уже сохранены или нет. Когда я пытаюсь сохранить список избранного массива в NSUserDefaults, он сохраняет и также показывает значения, когда я его извлекаю. Но когда я закрываю свое приложение из симулятора и снова запускаю его, он не показывает значения в массиве избранных списков, которые я сохранил в NSUserDefaults, а также хочу установить состояние изображения кнопки в соответствии с элементом, уже добавленным или нет.пытается создать любимую кнопку для добавления элементов в список избранных

Output Когда я постучал по любимому. И снова запустите после закрытия моего приложения. Может ли кто-нибудь сказать мне, как я могу это исправить. Или может кто-нибудь, пожалуйста, исправить это в моих project. Благодарности

import UIKit 

var url : [NSString] = [ 
    "https://www.youtube.com/watch?v=9h30Bx4Klxg", 
    "https://www.youtube.com/watch?v=ij_0p_6qTss", 
    "https://www.youtube.com/watch?v=AJtDXIazrMo", 
    "https://www.youtube.com/watch?v=H202k7KfZL0", 
    "https://www.youtube.com/watch?v=CGyEd0aKWZE", 
    "https://www.youtube.com/watch?v=AtKZKl7Bgu0", 
    "https://www.youtube.com/watch?v=4SYlLi5djz0"] 

var image : [NSString] = ["1.jpg", "2.jpg", "3.jpg", "4.jpg", "5.jpg", "6.jpg", "7.jpg"] 


class LiveCollectionView: UIViewController, UICollectionViewDataSource,UIWebViewDelegate { 

    @IBOutlet weak var collectionView: UICollectionView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(animated: Bool) { 
     let value = UIInterfaceOrientation.Portrait.rawValue 
     UIDevice.currentDevice().setValue(value, forKey: "orientation") 
    } 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return url.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
    { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! LiveCollectionViewCell 

     cell.imageView.image = UIImage(named: image[indexPath.row] as String) 
     cell.playBt.addTarget(self, action: Selector("webView:"), forControlEvents: UIControlEvents.TouchUpInside) 

     cell.playBt.tag = indexPath.row 
     cell.heartBt.tag = indexPath.row 

     return cell 
    } 

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath){ 
    } 
} 

import UIKit 

class LiveCollectionViewCell: UICollectionViewCell{ 

var showPlayButton = true 

var number = Int() 
var secondNumber = Int() 

@IBOutlet weak var playBt: UIButton! 

@IBOutlet weak var imageView: UIImageView! 

@IBOutlet weak var heartBt: UIButton! 

@IBAction func heartBt(sender: UIButton) { 


    var btn : NSInteger 
    btn = sender.tag as NSInteger 

    let uValues = url[btn] 
    let iValues = image[btn] 

    if showPlayButton == true{ 
     u.append(url[btn]) 
     i.append(image[btn]) 

     self.heartBt.setImage(UIImage(named: "rheart"), forState: UIControlState.Normal) 
     showPlayButton = false 
     print("rHeart xxxxxxxxxxxxxxx") 

    }else{ 

     for check in u { 

      number++ 
      print(number) 

      if uValues == check{ 
       print(u) 
       u.removeAtIndex(number-1) 
       number = 0 
       print("RemoVe at indext path") 
       print(u) 
       break 

      } 

     } 

     for check2 in i{ 

      secondNumber++ 
      print(secondNumber) 

      if iValues == check2{ 
       print(i) 
       i.removeAtIndex(secondNumber-1) 
       secondNumber = 0 
       print("RemoVe at indext path") 
       print(i) 
       self.heartBt.setImage(UIImage(named: "wHeart"), forState: UIControlState.Normal) 
       showPlayButton = true 
       print("wHeart ........") 
       break 

      } 

     } 

    } 

} 
} 

import UIKit 
var u : [NSString] = [] 
var i : [NSString] = [] 
class FavoriteTvViewController: UIViewController , UICollectionViewDelegate{ 
    var uV : NSArray = [] 
    var iV : NSArray = [] 

    @IBOutlet weak var collectionView: UICollectionView! 

    let reuseIdentifier = "cell" 

    override func viewDidLoad(){ 
    } 

    override func viewWillAppear(animated: Bool) { 
     collectionView.reloadData() 
     NSUserDefaults.standardUserDefaults().setObject(u, forKey: "u") 
     NSUserDefaults.standardUserDefaults().setObject(i, forKey: "i") 
     NSUserDefaults.standardUserDefaults().synchronize() 

     uV = NSUserDefaults.standardUserDefaults().arrayForKey("u") as! NSArray 
     iV = NSUserDefaults.standardUserDefaults().arrayForKey("i") as! NSArray 
     print("uV values.. \(uV)") 
     print("iV values.. \(iV)") 
    } 

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    { 
     return uV.count 
    } 

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> FavoriteTvCollectionViewCell 
    { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! FavoriteTvCollectionViewCell 

     cell.imageView.image = UIImage(named: iV[indexPath.row] as! String) 
     return cell 
    } 
} 

import UIKit 
class FavoriteTvCollectionViewCell: UICollectionViewCell { 
    @IBOutlet weak var imageView: UIImageView! 
} 
+0

Пожалуйста, загрузите изображения на SO, а не делиться на Google диске (ссылки могут быть сломаны несколько месяцев назад, но люди будут видеть вопрос, если вы не удалите его) –

+1

Мой профиль репутации менее 10, как я могу загрузить на SO? – AzKa

ответ

3

Я проверил свой образец проекта, я сделал небольшое изменение в настоящее время это работающ отлично.

override func viewWillAppear(animated: Bool) { 
    collectionView.reloadData() 
    //You have check for availablity of favorute item before adding to userdefault 
    if u.count > 0 { 
     NSUserDefaults.standardUserDefaults().setObject(u, forKey: "u") 
     NSUserDefaults.standardUserDefaults().setObject(i, forKey: "i") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 


    uV = NSUserDefaults.standardUserDefaults().arrayForKey("u")! 
    iV = NSUserDefaults.standardUserDefaults().arrayForKey("i")! 
    print("uV values.. \(uV)") 
    print("iV values.. \(iV)") 
} 

Проверить наличие объекта перед его добавлением в Userdefault.Now его работает отлично дать ему попробовать и дайте мне знать ответ пожалуйста.

EDIT: Я отредактировал ваш код, теперь он работает нормально, я слышу список всех этих изменений, сделанных мной.

  1. В LiveCollectionView.swift:

    Объявление двух объектов, и в viewdidload:

    var MutableArray:NSMutableArray! 
        let defaults = NSUserDefaults.standardUserDefaults() 
    
    
        override func viewDidLoad() { 
        super.viewDidLoad() 
    
         MutableArray = NSMutableArray() 
         if let HaveUrl = defaults.objectForKey("u"){ 
         u = HaveUrl.mutableCopy() as! [NSString] 
         } 
         if let HaveImage = defaults.objectForKey("i"){ 
         i = HaveImage.mutableCopy() as! [NSString] 
         } 
    
    
        if let CheckAvailability = defaults.objectForKey("Fav_Unfav"){ 
         MutableArray = CheckAvailability.mutableCopy() as! NSMutableArray 
        }else{ 
        for var Check in image { 
         print(Check) 
         MutableArray.addObject("wHeart") 
        } 
        } 
    } 
    

    cellForItemAtIndexPath:

    //Add this New Line 
    cell.heartBt.setImage(UIImage(named: MutableArray[indexPath.row] as! String), forState: UIControlState.Normal) 
    
  2. LiveCollectionViewCell.swift:

    class LiveCollectionViewCell: UICollectionViewCell{ 
    
    var showPlayButton = true 
    
    var number = Int() 
    var secondNumber = Int() 
    
    @IBOutlet weak var playBt: UIButton! 
    
    @IBOutlet weak var imageView: UIImageView! 
    
    @IBOutlet weak var heartBt: UIButton! 
    
    @IBAction func heartBt(sender: UIButton) { 
    
    
    var btn : NSInteger 
    btn = sender.tag as NSInteger 
    
    let uValues = url[btn] 
    let iValues = image[btn] 
    
    if MutableArray[btn] as! String == "rheart" { 
        showPlayButton = false 
    } 
    
    if showPlayButton == true{ 
        //Add this Line 
        MutableArray.replaceObjectAtIndex(btn, withObject: "rheart") 
    
        u.append(url[btn]) 
        i.append(image[btn]) 
        self.heartBt.setImage(UIImage(named: "rheart"), forState: UIControlState.Normal) 
        showPlayButton = false 
        print("rHeart xxxxxxxxxxxxxxx") 
    
    }else{ 
        //Add this Line 
        MutableArray.replaceObjectAtIndex(btn, withObject: "wHeart") 
    
        for check in u { 
    
         number++ 
         print(number) 
    
         if uValues == check{ 
          print(u) 
          u.removeAtIndex(number-1) 
          number = 0 
          print("RemoVe at indext path") 
          print(u) 
    
          break 
    
         } 
    
        } 
    
        for check2 in i{ 
    
         secondNumber++ 
         print(secondNumber) 
    
         if iValues == check2{ 
          print(i) 
          i.removeAtIndex(secondNumber-1) 
          secondNumber = 0 
          print("RemoVe at indext path") 
          print(i) 
          self.heartBt.setImage(UIImage(named: "wHeart"), forState: UIControlState.Normal) 
          showPlayButton = true 
          print("wHeart ........") 
          break 
    
         } 
    
        } 
    
    } 
        //Set the array to userdefault 
        defaults.setObject(MutableArray, forKey: "Fav_Unfav") 
        defaults.setObject(u, forKey: "u") 
        defaults.setObject(i, forKey: "i") 
    
        defaults.synchronize() 
        } 
    } 
    
  3. FavoriteTvViewController.swift:

    override func viewWillAppear(animated: Bool) { 
        collectionView.reloadData() 
    
        if let CheckURL = defaults.objectForKey("u") { 
        uV = CheckURL.mutableCopy() as! NSArray 
        } 
    
        if let CheckImage = defaults.objectForKey("i"){ 
        iV = CheckImage.mutableCopy() as! NSArray 
        } 
    
        print("uV values.. \(uV)") 
        print("iV values.. \(iV)") 
    } 
    
Смежные вопросы