ios - 如何将数据从 Realm 传递到 ViewController

标签 ios swift xcode realm pass-data

我在 swift 2.3xcode 7.3.1 中制作新闻应用程序。我有来自服务器的 Realm 数据库和其中的数据。当我按下按钮并显示所选数据(新闻)时,我需要移动到 ViewController 。按钮上方是我的新闻元素。如何从选定的新闻元素传递数据以在另一个 ViewController 上显示详细信息?

这是新闻元素。按钮通过水平滚动的元素: enter image description here

这是代码:

import UIKit
import RealmSwift

let realm4 = try! Realm()

class MainViewController: UIViewController, HorizontalScrollDelegate {

let newsObj = realm4.objects(News)
let nObj = News()

var imageURL: NSURL?

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override func viewDidLoad() {
    super.viewDidLoad()

    let hScroll = HorizontalScroll(frame: CGRectMake(0, 0, 380, 160))
    hScroll.delegate = self
    hScroll.backgroundColor = UIColor.whiteColor()
    self.view.addSubview(hScroll)
    view.reloadInputViews()

}
   func numberOfScrollViewElements() -> Int {
        return newsObj.count
    }

    func elementAtScrollViewIndex(index: Int) -> UIView {

        let indexes = newsObj[index]

        let view = UIView(frame: CGRectMake(5.0, 0.0, 200.0, 200.0))
        var imageView = UIImageView()
        let imageLabel = UIImageView()
        let newsLable = UILabel()
        let button = UIButton()

        var image: UIImage? {

            get { return imageView.image }
            set {
                imageView.image = newValue
                imageView.sizeToFit()
            }
        }

        newsLable.text = indexes.newsTitle

        imageURL = NSURL(string: indexes.newsImage)

        if let url = imageURL {
            let imageData = NSData(contentsOfURL: url)
            if imageData != nil {
                image = UIImage(data: imageData!)
            }
        }

        newsLable.lineBreakMode = .ByWordWrapping
        newsLable.font = UIFont(name: "Roboto-Bold", size: 18)
        newsLable.textColor = UIColor.whiteColor()
        newsLable.frame = CGRectMake(7.0, 90.0, 200.0, 50.0)
        newsLable.textAlignment = .Left
        newsLable.numberOfLines = 0

        button.frame = CGRectMake(0.0, 0.0, 200.0, 200.0)
        button.addTarget(indexes, action: #selector(tapAction2), forControlEvents: .TouchUpInside)
        print("This is 1 nObj \(self.nObj)")

        imageLabel.backgroundColor = UIColor.blackColor()
        imageLabel.alpha = 0.45
        imageLabel.frame = CGRectMake(5.0, 90.0, 200.0, 65.0)
        imageView.frame = view.frame

        view.addSubview(imageView)
        view.addSubview(imageLabel)
        view.addSubview(newsLable)
        view.addSubview(button)

        return view
    }

func tapAction2(index: Int) {
    print("This is func INDEX \(index)")
    //let segueIndex = index
    let storyBoard = UIStoryboard(name: "Main", bundle: nil)
    let newView = storyBoard.instantiateViewControllerWithIdentifier("NewsDetailViewController") as! NewsDetailViewController
    newView.modalPresentationStyle = UIModalPresentationStyle.Custom
    print("This is nObj \(self.nObj)")
    print("This is INDEX \(index)")
    newView.newsOfTitle = String(index)
    presentViewController(newView, animated: true, completion: nil)
}
}

我尝试使用索引传递数据。但在控制台中我有空数据。也许Realm有问题。 在控制台中我看到

This is INDEX 140659923446288

但是我的项目中没有这些数据

这是我的 Realm 数据库

enter image description here

最佳答案

UIButton Class Reference 中所述,操作方法的签名采用三种形式之一

@IBAction func doSomething()
@IBAction func doSomething(sender: UIButton)
@IBAction func doSomething(sender: UIButton, forEvent event: UIEvent)

但不是func doSomething(index: Int)

这就是您在方法中得到错误索引的原因。

关于ios - 如何将数据从 Realm 传递到 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40014868/

相关文章:

ios - 快速将自定义注释图钉图像更新为标准注释图钉

iphone - 我可以用不同的应用程序名称上传相同的应用程序吗?

ios - Swift 如何添加工作时钟?

ios - 如何设置collectionview swift单元格的位置?

跨不同构建目录的 Xcode 依赖项?

ios - viewController 中幻灯片类型显示多张照片?

ios - CoreData 教程抛出错误,插入 nil

ios - 在 Swift 中使用 performSegueWithIdentifier 执行 segue 时如何传递参数

ios - tableww 单元格中的 Collectionview。这是重用的错误

ios - xcode 模拟器没有出现 - 可以重新安装吗?