ios - 如果数组缺少对象,如何添加要解析的字符串?

标签 ios swift parse-platform

我有两个数组,歌曲(ret)和艺术家(ter)。我正在从解析中检索该信息,但是当每个数组中的计数彼此不匹配时,应用程序崩溃。我想避免这种情况,而不是应用程序崩溃,我希望将字符串“抱歉没有可用的艺术家”添加到缺少艺术家的行中。我该怎么做?

下面是数据库正确运行时的样子。 enter image description here

下面是数据库崩溃时的情况。这是我想添加“抱歉没有艺术家可用”的地方

enter image description here

下面是检索数据的代码。

 func getSongs(){
    let retrieve = PFQuery(className: "Pointer")
    retrieve.orderByDescending("createdAt")
    retrieve.findObjectsInBackgroundWithBlock({
        (objects: [AnyObject]?, error: NSError?) -> Void in
        var object = objects as! [PFObject]
        if(error == nil){

            self.ret = []
            self.ter = []

            for i in 0...object.count-1{


                if (object[i].valueForKey("user")!.objectId == currentUserID){

                    self.ret.append(object[i].valueForKey("title") as! String)
                    self.ter.append(object[i].valueForKey("artist") as! String)
                    print(self.ret)
                    print(self.ter)


                }
            }
        }

    })

}

最佳答案

这是因为 valueForKey("artist") 可能为 nil,并且您不能将 nil 放入数组中。

我建议您使用一个结构来保存歌曲数据,因为如果它们不同步,那么拥有两个独立的数组将导致轨道出现问题(确实很烦人的错误)

创建一个像这样的结构:

struct Song {
        let title: String
        let artist: String

        init(titleString: String?, artistString: String?) {
            if let titleStringUnwrapped = titleString {
                title = titleStringUnwrapped
            } else {
                title = "Title not found"
            }

            if let artistStringUnwrapped = artistString {
                artist = artistStringUnwrapped
            } else {
                artist = "Artist not found"
            }
        }
    }

然后,您只需创建一个 [Song] 类型的数组并将新歌曲结构附加到其中即可:

if (object[i].valueForKey("user")!.objectId == currentUserID){
  let newSong = Song(
    titleString: object[i].valueForKey("title") as? String,
    artistString: object[i].valueForKey("artist") as? String
  )
}

关于ios - 如果数组缺少对象,如何添加要解析的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928900/

相关文章:

ios - 如何在加载应用程序和完全加载网页 View 页面之前直接添加启动画面图像?

ios - Xcode 10.2 支持最新的 NativeScript?

swift - 如何在 Swift 'Share App Extension' 中获取附件的 (NSItemProvider) 文件路径?

ios - 我无法将视频上传到服务器

ios - PFQuery findObjectsInBackgroundWithBlock : in WatchKit app works in simulator, 不在 watch 上,除非 iOS 应用程序在前台

ios - 为什么此代码无法将NSString识别为相等?

iphone - 我可以使用 Windows 机器在应用商店上分发(而不是开发)我的 iOS 应用吗

IOS 构建良好但在设备上运行时出错

ios - 关闭一个 View Controller 并以相同的方法呈现一个新的 - swift

Swift OSX - Parse.com - 保存新用户而不进行更改