尝试创建“收藏夹”按钮以在收藏夹列表中添加项目

2023-12-19

我正在尝试在 CollectionViewCell 上创建收藏夹按钮,用于将项目保存在收藏夹列表中。当我点击收藏夹图标按钮时,它成功地将选定的单元格项目添加到收藏夹列表类的数组中,并且也显示在收藏夹列表中。当我点击收藏夹按钮时,它会根据已保存或未保存的值更改其图像。 当我尝试在 NSUserDefaults 中保存收藏夹列表数组时,它会保存并在我检索它时显示值。但是,当我从模拟器关闭我的应用程序并再次运行时,它不会显示我保存在 NSUserDefaults 中的收藏夹列表数组中的值,并且还想根据已添加或未添加的项目设置按钮图像状态。

Output https://drive.google.com/open?id=0B29ka7gbDAYxbkRqa29aZWh0dWM当我点击最喜欢的。关闭我的应用程序后再次运行。 谁能告诉我如何解决这个问题。或者任何人都可以在我的中修复它project. https://drive.google.com/open?id=0B29ka7gbDAYxVHlHb3dZcGlTV0U Thanks

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!
}

我检查了您的示例项目,我做了一个小更改,现在它工作正常。

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 之前检查对象的可用性。现在它工作正常,尝试一下,请告诉我响应。

EDIT:我已经编辑了你的代码,现在它工作正常,我听到列出了我所做的所有更改。

  1. In 实时 CollectionView.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. 最喜欢的TvViewController.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)")
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试创建“收藏夹”按钮以在收藏夹列表中添加项目 的相关文章

  • 删除后台 moc 中的对象然后在主 moc 中刷新它会导致 NSFetchedResultsController 更新崩溃

    我遇到了一个NSObjectInaccessibleException我无法理解 Terminating app due to uncaught exception NSObjectInaccessibleException reason
  • 为什么我们在 @synchronized 块中传递 self ?

    我猜 synchronized 块不依赖于对象 而是依赖于线程 对吗 既然如此 我们为什么要传递 self 呢 synchronized是语言提供的用于创建同步作用域的构造 因为使用简单的全局共享互斥锁效率非常低 因此序列化每个单独的互斥锁
  • 应用程序图标未刷新

    我更改了新版本应用程序中的图标图像 并且我在设备中安装了旧版本应用程序 然后我安装了新版本 它在 iOS 5 中运行良好 但在 iOS 6 中 图标没有刷新 它仍然显示旧版本图标 徽标 如果没有安装旧版本应用程序 该设备在 iOS 5 和
  • 适用于 iOS 的 Google Cast SDK 2.3.0 不支持 64 位

    似乎是适用于 iOS 的 Google Cast SDK 2 3 0 版本 https developers google com cast downloads GoogleCastFramework 2 3 0 Release zip停止
  • 如何在 Swift 中使用 substringToIndex? [复制]

    这个问题在这里已经有答案了 我在这一行收到编译器错误 UIDevice currentDevice identifierForVendor UUIDString substringToIndex 8 类型 String Index 不符合协
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • 使用 UIActionSheet 更改视图时工具栏项目消失

    当从 a 启动视图时UIActionSheet按钮 通过导航栏后退按钮返回视图后 工具栏虽然仍然可见 但上面没有任何以前的按钮 自从更新到 iOS 6 以来 这个错误就出现了 并且是在模拟器和仅运行 iOS 6 的设备上测试时发生的 如果我
  • 如何在 RestKit 中为同一类提供两条发布路线

    由于我无法弄清楚如何为同一个类设置两个不同的 POST 资源路径 因此我尝试手动创建 RKObjectLoader 请求 但它似乎不断发送 GET 请求而不是 POST 即使我已将方法设置为邮政 这是我的代码 User user User
  • WebGL iOS 渲染为浮点纹理

    我正在尝试在 iOS Safari 上的 WebGL 中渲染浮点纹理 而不是在本机应用程序中 我已经设法让 iOS 读取手动 例如从 JavaScript 创建的浮点纹理 但是当我创建浮点类型的帧缓冲区并使用 GPU 渲染到其中时 它不起作
  • 在 Interface Builder 中的资产目录上使用图像

    是否可以直接在界面生成器上使用添加到资产目录中的图像 这是怎么做到的 在 UIImageView 属性上 我看不到任何引用资产目录上任何图像的选项 Import the images into the xcassets folder 单击右
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • Swift -boundingBox 导致 EXC_BAD_ACCESS (代码 = 1)

    我正在使用 SceneKit 来显示文本节点 这是我的代码 foo swift extension SCNNode func getNodeSize gt width Float height Float let min max bound
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 从 RemoteIO 保存音频的示例?

    我进行了搜索 但没有找到任何从 RemoteIO 音频单元保存音频的好示例或教程 我的设置 使用 MusicPlayer API 我有几个 AUSamplers gt MixerUnit gt RemoteIO 音频播放效果很好 我想添加将
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • 如何在 Swift 语言中传递错误指针?

    我试图在 swift 中传递错误指针 但无法这样做 编译器抱怨 NSError 无法转换为 NSErrorPointer var error NSError NSError var results context executeFetchR
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐