为什么标题重复了?

2024-04-17

我正在获取当前正在播放的歌曲,捕获标题和艺术家,并将其存储在解析中。由于某种原因,当歌曲播放时,程序会添加 4 首左右相同的标题/艺术家。相反,我只想要一个。我该如何解决?

在解析数据浏览器中看到的我的对象 https://i.stack.imgur.com/tsCOw.png

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated);

    NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil)
    musicPlayer.beginGeneratingPlaybackNotifications()
}

func getNowPlayingItem() {

    NSNotificationCenter.defaultCenter().removeObserver(self)

    if  let nowPlaying = musicPlayer.nowPlayingItem  {
        let title = nowPlaying[MPMediaItemPropertyTitle] as? String
        let artisttest = nowPlaying[MPMediaItemPropertyTitle]
        if let artist = nowPlaying[MPMediaItemPropertyArtist] as? String{
            let objectPointer = PFObject(className: "Pointer")
            let object = PFObject(className: "MasterSongs")

            let query = PFQuery(className: "Pointer")
            query.findObjectsInBackgroundWithBlock({
                (objects: [AnyObject]?, error: NSError?) -> Void in
                var objectIDs = objects as! [PFObject]

                for i in 0...objectIDs.count-1{
                    self.Parsearray.append((objectIDs[i].valueForKey("title") as? String)!)
                    // print(self.Parsearray)
                }

                if self.Parsearray.contains(title!){
                    print("already in db")
                }else{
                    objectPointer["title"] = title
                    objectPointer["user"] = PFUser.currentUser()
                    objectPointer["artist"] = artist

                    objectPointer.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in
                        if(error != nil){
                            print(error)
                        }else{
                            NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil)
                        }
                    })
                }
            })
        }else{

            let objectPointer = PFObject(className: "Pointer")

            let query = PFQuery(className: "Pointer")
            query.findObjectsInBackgroundWithBlock({
                (objects: [AnyObject]?, error: NSError?) -> Void in
                var objectIDs = objects as! [PFObject]

                for i in 0...objectIDs.count-1{
                    self.Parsearray.append((objectIDs[i].valueForKey("title") as? String)!)

                    // print(self.Parsearray)
                }

                if self.Parsearray.contains(title!){
                    print("already in db")
                }else{
                    objectPointer["title"] = title
                    objectPointer["user"] = PFUser.currentUser()
                    objectPointer["artist"] = "No artist found :("

                    objectPointer.saveInBackgroundWithBlock({ (success: Bool, error: NSError?) -> Void in

                        if(error != nil){
                            print(error)
                        }else{
                            NSNotificationCenter.defaultCenter().addObserver(self, selector: "getNowPlayingItem", name: MPMusicPlayerControllerNowPlayingItemDidChangeNotification, object: nil)
                        }
                    })
                }
            })
        }
    }
}

从证据来看,该函数很有可能getNowPlayingItem被快速调用了几次。它会启动查询,其中一些查询会在保存任何内容之前完成。这些查询完成(尚未完成保存)会启动一些保存,并且您会获得一些对象。

通过在方法开始处和之前打印一条消息来检查这一点saveInBackground注意控制台上的时间戳。

如果我是对的,修复很简单:(a)找出为什么该方法被多次调用并修复它,或者(b)向封闭类添加一个布尔实例变量,将其命名为类似busySaving。在方法开始时,如果出现以下情况则退出busySaving为 true,否则将其设置为 true 并继续。改变你的saveInBackground() to saveInBackgroundWithBlock()并重置busySaving完成块中的标志。

EDIT现在我们明白为什么它被重复调用:因为通知被重复接收。修复(上面的想法(a))的一种方法是在开始时停止观察该通知(NSNotificationCenter removeObserver)getNowPlayingItem。然后,由于您想获得后续通知,请在保存后重新将自己添加为观察者,使用saveInBackgroundWithBlock。请注意,这与saveInBackground 请参阅此处以供参考 https://parse.com/docs/ios/api/Classes/PFObject.html#//api/name/saveInBackgroundWithBlock:.

如果您愿意,上面的想法 (b) 仍然适用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么标题重复了? 的相关文章

  • 进入后台时 Alamofire 请求卡住?

    我正在使用 Alamofire 调用 Web 服务 该服务需要相当长的时间才能加载 如果应用程序进入后台 当我返回应用程序时 我会被加载程序卡住 我想这是因为调用永远不会向我的完成处理程序返回任何内容 我该如何解决这个问题 您可以使用后台抓
  • 选择 UITableViewCell 时 UIView 背景颜色消失

    我在界面生成器中构建了一个简单的 tableViewCell 它包含一个包含图像的 UIView 现在 当我选择单元格时 会显示默认的蓝色选择背景 但 UIView 的背景颜色消失了 我的 UITableViewCell 的实现文件没有做任
  • iOS uiwebview 在 WebThread 中崩溃

    我正在寻求一些建议或帮助诊断我所看到的这次崩溃 目前 我认为这可能是一个 webkit 错误 但一切皆有可能 因此请提供您可能有的任何见解 Incident Identifier AEB8EE37 E5D4 4975 97F4 2B2038
  • UITesting、XCTest 当前 ViewController 类

    简单的问题 我有一个按钮可以执行到下一个视图控制器的操作 我想写 UI XCTest 来告诉我它是否打开了我想要的视图控制器 UI 测试框架无法访问您的应用程序代码 这使得无法对实例进行类断言 你不能够directly告诉屏幕上的控制器的类
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • 在 ios 版 Ionic 中接收 URL

    我正在使用离子框架 我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我找到了这个cordova https stackoverflow com questions
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • NSURLCache 不缓存

    我正在使用 Xcode 6 1 6A1030 iOS7 和 iOS8 模拟器 NSURLCache 似乎没有缓存任何东西 我使用 Cache Control 标头 我的服务器返回带有 max age 6000 的 Cache Control
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • 使用 BGTaskScheduler 进行后台获取与调试模拟完美配合,但在实践中却不起作用

    我在 appDelegate 的 didFinishLaunchingWithOptions 中注册后台获取任务 BGTaskScheduler shared register forTaskWithIdentifier Backgroun
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • 命令 /Applications/Xcode-beta.app/Contents/Developer/usr/bin/atool 失败,退出代码 255

    它发生在新的 Xcode7 beta 中 CompileAssetCatalog Users admin Library Developer Xcode DerivedData InstaAd ddgdnbxlpxipirebpndfmgr
  • 在 Swift 中以编程方式为 iOS 制作带有名字首字母的图像,例如 Gmail

    我需要在 UITableView 中显示与其姓名相对应的每个用户的个人资料图片 在下载图像之前 我需要显示一张带有他名字的第一个字母的图像 就像在 GMail 应用程序中一样 如何在 Swift for iOS 中以编程方式执行此操作 不需
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • UILabel UILongPressGestureRecognizer 不起作用?

    我怎样才能得到UILongPressGestureRecognizer在 uilabel 当我实现以下代码时 它不会调用该函数 那么请告诉我我做错了什么 UILongPressGestureRecognizer longPress UILo
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 无需越狱即可检测iOS9上哪个应用程序处于前台

    我正在尝试记录用户在 iOS9 上的个人应用程序使用情况 我宁愿它不会使用越狱有限的解决方案 不言自明 在越狱手机上执行此应用程序的变体应该不难 https www andyibanez com create mobilesubstrate
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且

随机推荐

  • 从函数中打开 fancybox

    我正在尝试从我拥有的函数中打开一个 fancybox 简而言之 我的 HTML 代码如下所示 a href modalMine click a 我的功能的一部分如下所示 function myfunction me me fancybox
  • 针对 unsafePerformIO 的部门限制

    工作中有人讨论过将其作为一项全部门政策 禁止使用unsafePerformIO及其同类 就我个人而言 我并不介意 因为我一直认为 如果我发现自己想要使用它 通常意味着我需要重新考虑我的方法 这个限制听起来合理吗 我似乎记得在某处读到它主要是
  • iOS:如何打开带有动画效果的相机?

    我想以动画效果打开相机 以便看起来相机仅在父屏幕中打开 我正在使用相机覆盖屏幕 在父屏幕中单击按钮事件时 相机覆盖屏幕正在打开 在相机覆盖屏幕中有一个取消按钮可以关闭相机 因此在再次关闭相机时我需要显示动画效果看起来现在相机在同一个父屏幕中
  • Python 类中的属性初始化/声明:将它们放在哪里?

    我想知道在 Python 中初始化对象属性的最佳实践是什么 在类的主体中还是在 init 功能 i e class A object foo None vs class A object def init self self foo Non
  • 在 postgresql 中生成自动 ID

    用户表 ID Name 1 usr1 2 usr2 3 usr3 上表中 ID为主键 我的要求是在将数据插入表中时 我只想指定 名字像INSERT INTO user VALUES usr4 执行查询后 有没有办法自动为 usr4 创建ID
  • ACRA 行号不正确

    我使用 android proguard ACRA 谁能告诉我为什么我收到的崩溃报告的行号不正确 行号显然指向错误的陈述 我无法知道崩溃的确切行号 因此无法修复用户报告的错误 这真的很烦人 谢谢 PS 我使用的是我发布的版本对应的映射文件
  • 如何设置 QBrush 的颜色动画

    我想要动画颜色QBrush 更多详情请看下面的代码 这是我的 h 文件 class Cell public QObject public QGraphicsRectItem Q OBJECT Q PROPERTY QBrush brush
  • Jquery 动态更改链接扩展名

    我在很多页面都设置了链接 例如 ul li a href someurl somefile html Some file a li li a href someurl somefile1 html Some file1 a li li a
  • CMake+Xcode:应用程序存档失败,具体取决于同一解决方案中的库。在 BUILD_TREE 而不是 Xcode/DerivedData 中构建 Archive?

    几周前 我们移植了代码库以使用 CMake 进行构建管理 我们现在意识到 当我们试图做到这一点时 存在一个重大问题Archive依赖于同一 Xcode 解决方案中构建的一个 或多个 库的应用程序 链接器失败 因为它找不到所依赖的库 并且该库
  • 以编程方式更改小部件的渐变背景

    我正在努力实现的目标 int colors new int colorDark colorLight GradientDrawable gd new GradientDrawable TOP BOTTOM colors remoteView
  • IIS 7.5 405 不允许从 StaticFileModule 进行 PUT 方法

    我将第 3 方 xml 编辑器集成到我们的 Web 应用程序中 并且保存函数直接对 Web 服务器上的文件执行 HTTP PUT 操作系统是使用 IIS 7 5 的 Windows Server 2008 R2 我们安装了 Web API
  • 使用 API 蓝图记录查询参数

    我正在尝试在 API 蓝图中记录查询参数 但我不完全确定我是否正确完成了操作 该资源如下所示 DELETE http baasar apiary mock com user appId userId 该请求将停用用户 而以下请求将删除用户对
  • 中可以有 吗?

    故事如下 我正在使用 SWFObject 将 Flash 对象插入到我的页面中 嵌入吃掉了我的span 所以 我为此失去了所有 CSS 我正在考虑将所有 CSS 移至父级 这样当 Flash 出现时我就不会丢失 CSS 样式 我尝试过使用s
  • CSS :focus-within 选择器,用于具有 iframe 子元素的元素

    我有一个这样的场景 container background yellow padding 40px container focus within background red iframe background white div cla
  • 异步作业出错

    我正在尝试创建一个不会阻止请求的异步任务 用户发出请求 任务将启动 控制器将呈现 作业正在运行 这是为了避免请求被阻止等待任务完成 任务完成后 它将执行 onComplete 并对该任务的结果执行某些操作 例如调用将向用户发送邮件的服务 E
  • 循环遍历 Silverlight DataGrid 中的行

    我有一种感觉 我在这里遗漏了一些明显的东西 但我找不到迭代 DataGrids DataGridRow 集合的方法 我有一个网格 其中包含我的班级集的集合的项目源 我试图迭代这些行并突出显示满足特定条件的任何行 但我一生都看不到如何实现 您
  • 在循环语句中生成 MVC3 RadioButton 列表

    我的一位同事创建了一个模型 如下所示 Model Serializable public class ModifyCollegeListModel public List
  • HTTP 错误 999:请求被拒绝

    我正在尝试使用 BeautifulSoup 从 LinkedIn 抓取一些网页 但不断收到错误 HTTP 错误 999 请求被拒绝 有没有办法避免这个错误 如果您查看我的代码 我尝试过 Mechanize 和 URLLIB2 两者都给了我相
  • 如何在 Visual Studio 2019 的 CMakeLists.txt 中启用 clang-tidy?

    视觉工作室 2019文档 https learn microsoft com en us visualstudio code quality clang tidy view只谈改变CMakeSettings json启用clang tidy
  • 为什么标题重复了?

    我正在获取当前正在播放的歌曲 捕获标题和艺术家 并将其存储在解析中 由于某种原因 当歌曲播放时 程序会添加 4 首左右相同的标题 艺术家 相反 我只想要一个 我该如何解决 在解析数据浏览器中看到的我的对象 https i stack img