Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 解析:按行检索数据_Swift_Uitableview_Parse Platform - Fatal编程技术网

Swift 解析:按行检索数据

Swift 解析:按行检索数据,swift,uitableview,parse-platform,Swift,Uitableview,Parse Platform,概述:我如何才能使其在使用segue时 标识符0将加载ID为0的行中的数据,序列标识符为1的单元格将加载ID为1的行中的数据,依此类推。数据包括ID(响应单元格标识符)、navTitle(导航栏标题)、Write(文章作者)、date(文章日期)和article(文章本身) 我试图使它一旦在我的tableview中点击一个单元格,它就会打开该单元格特有的数据。最好的方法是什么?我在想,也许我应该让它检查我在解析中的ID列,并加载该行中的数据,但我不确定如何做到这一点。有更好的方法吗?感谢您的帮

概述:我如何才能使其在使用segue时 标识符0将加载ID为0的行中的数据,序列标识符为1的单元格将加载ID为1的行中的数据,依此类推。数据包括ID(响应单元格标识符)、navTitle(导航栏标题)、Write(文章作者)、date(文章日期)和article(文章本身)

我试图使它一旦在我的tableview中点击一个单元格,它就会打开该单元格特有的数据。最好的方法是什么?我在想,也许我应该让它检查我在解析中的ID列,并加载该行中的数据,但我不确定如何做到这一点。有更好的方法吗?感谢您的帮助!请随时向我询问任何其他信息

^所以这里我有一个tableview,其中的数据是从Parse中获取的,并用于两个标签

^此视图控制器与上面的单元格进行了分段:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if indexPath.row == 0 {
        self.performSegueWithIdentifier("0a", sender: nil)
        self.tableview.deselectRowAtIndexPath(indexPath, animated: true)

    }
}
这是我的事件DetailViewController,点击单元格时调用的控制器:

import UIKit
import Parse
import ParseUI
import Bolts

class EventDetailViewController: UIViewController {

@IBAction func eventDetail(sender: AnyObject) {
    dismissViewControllerAnimated(true, completion: nil)

}

@IBOutlet weak var articleTitle: UILabel!
@IBOutlet weak var writtenBy: UILabel!
@IBOutlet weak var date: UILabel!
@IBOutlet weak var article: UITextView!
@IBOutlet weak var navBar: UINavigationBar!

var dateDetail = [String]()
var articleDetail = [String]()

override func viewDidLoad() {
    super.viewDidLoad()

    loadEvents()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func loadEvents () -> Void {

    var query = PFQuery(className: "eventsdetail")
    query.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error : NSError?) -> Void in

        if error == nil {

            if let objects = objects as [PFObject]! {
                for object in objects {

                    var output1 = object.objectForKey("navTitle") as! String
                    self.navBar.topItem?.title = output1

                    var output2 = object.objectForKey("articleTitle") as! String
                    self.articleTitle.text = output2

                    var output3 = object.objectForKey("written") as! String
                    self.writtenBy.text = output3

                    var output4 = object.objectForKey("date") as! String
                    self.date.text = output4

                    var output5 = object.objectForKey("article") as! String
                    self.article.text = output5

                }
            }

        }

    }
}

}
这是我的事件查看控制器

import UIKit
import Parse
import Bolts
import ParseUI

class EventsViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var timer: NSTimer!
var isAnimating = false
var currentColorIndex = 0
var currentLabelIndex = 0
var customView: UIView!
var labelsArray: Array<UILabel> = []
var refreshControl: UIRefreshControl!
var testArray = [String]()
var subArray = [String]()

@IBOutlet weak var tableview: UITableView!


@IBOutlet weak var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()

    refreshControl = UIRefreshControl()

    tableview.delegate = self
    tableview.dataSource = self

    refreshControl.addTarget(self, action: Selector("loadEvents"), forControlEvents: UIControlEvents.ValueChanged)
    self.tableview.addSubview(refreshControl)
    loadEvents()

    loadCustomRefreshContents()

    //refreshControl colors
    refreshControl.backgroundColor = UIColor.clearColor() //color of background
    refreshControl.tintColor = UIColor.clearColor() //color of indicator
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func loadEvents () -> Void {

    testArray = [String]()
    subArray = [String]()

    let query = PFQuery(className: "events")
    let runkey = query.orderByDescending("eventTitle")
    runkey.findObjectsInBackgroundWithBlock {
        (objects: [PFObject]?, error:NSError?) -> Void in

        if error == nil {


            if let objects = objects as [PFObject]! {
                for object in objects {

                    let load = object.objectForKey("eventTitle") as! String
                    self.testArray.append(load)

                    let subload = object.objectForKey("date") as! String
                    self.subArray.append(subload)

                    //reload TableView
                    self.tableview.reloadData()
                    print(self.testArray)
                }

            }
        } else {

            print("error:\(error!) \(error!.userInfo)")
        }

    }

    refreshControl.endRefreshing()
}

func do_table_refresh() {

    dispatch_async(dispatch_get_main_queue()) {

        self.tableview.reloadData()
        return

    }

}

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    if indexPath.row == 0 {
        self.performSegueWithIdentifier("0a", sender: nil)
        self.tableview.deselectRowAtIndexPath(indexPath, animated: true)

    }
}

func tableView(tableView:UITableView!, numberOfRowsInSection section:Int) -> Int {
    return testArray.count
}

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("eventcell", forIndexPath: indexPath) as! EventTableViewCell
    cell.title.text = self.testArray[indexPath.row]
    cell.subTitle.text = self.subArray[indexPath.row]
    return cell
}

//refreshes tableview; starts refresh
func loadCustomRefreshContents() {
    let refreshContents = NSBundle.mainBundle().loadNibNamed("RefreshControl", owner: self, options: nil)

    customView = refreshContents[0] as! UIView
    customView.frame = refreshControl.bounds

    for var i=0; i<customView.subviews.count; ++i {
        labelsArray.append(customView.viewWithTag(i + 1) as! UILabel)
    }

    refreshControl.addSubview(customView)


}

//stops refresh
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
    do_table_refresh()

    if refreshControl.refreshing {
        if !isAnimating {
            animateRefreshStep1()

        }
    }
}

//cycles through colors
func getNextColor() -> UIColor {
    var colorsArray: Array<UIColor> = [UIColor.magentaColor(), UIColor.brownColor(), UIColor.yellowColor(), UIColor.redColor(), UIColor.greenColor(), UIColor.blueColor(), UIColor.orangeColor()]

    if currentColorIndex == colorsArray.count {
        currentColorIndex = 0
    }

    let returnColor = colorsArray[currentColorIndex]
    ++currentColorIndex

    return returnColor
}

func doSomething() {
    timer = NSTimer.scheduledTimerWithTimeInterval(4.0, target: self, selector: "endOfWork", userInfo: nil, repeats: true)
    self.do_table_refresh()

}

func endOfWork() {
    refreshControl.endRefreshing()

    timer.invalidate()
    timer = nil
}

//first part of animation
func animateRefreshStep1() {
    isAnimating = true

    UIView.animateWithDuration(0.1, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { () -> Void in
        self.labelsArray[self.currentLabelIndex].transform = CGAffineTransformMakeRotation(CGFloat(M_PI_4))
        self.labelsArray[self.currentLabelIndex].textColor = self.getNextColor()

        }, completion: { (finished) -> Void in

            UIView.animateWithDuration(0.05, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { () -> Void in
                self.labelsArray[self.currentLabelIndex].transform = CGAffineTransformIdentity
                self.labelsArray[self.currentLabelIndex].textColor = UIColor.blackColor()

                }, completion: { (finished) -> Void in
                    ++self.currentLabelIndex

                    if self.currentLabelIndex < self.labelsArray.count {
                        self.animateRefreshStep1()
                    }
                    else {
                        self.animateRefreshStep2()
                    }
            })
    })
}

//second part of animation
func animateRefreshStep2() {
    UIView.animateWithDuration(0.35, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { () -> Void in
        self.labelsArray[0].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[1].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[2].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[3].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[4].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[5].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[6].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[7].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[8].transform = CGAffineTransformMakeScale(1.5, 1.5)
        self.labelsArray[9].transform = CGAffineTransformMakeScale(1.5, 1.5)

        }, completion: { (finished) -> Void in
            UIView.animateWithDuration(0.25, delay: 0.0, options: UIViewAnimationOptions.CurveLinear, animations: { () -> Void in
                self.labelsArray[0].transform = CGAffineTransformIdentity
                self.labelsArray[1].transform = CGAffineTransformIdentity
                self.labelsArray[2].transform = CGAffineTransformIdentity
                self.labelsArray[3].transform = CGAffineTransformIdentity
                self.labelsArray[4].transform = CGAffineTransformIdentity
                self.labelsArray[5].transform = CGAffineTransformIdentity
                self.labelsArray[6].transform = CGAffineTransformIdentity
                self.labelsArray[7].transform = CGAffineTransformIdentity
                self.labelsArray[8].transform = CGAffineTransformIdentity
                self.labelsArray[9].transform = CGAffineTransformIdentity

                }, completion: { (finished) -> Void in
                    if self.refreshControl.refreshing {
                        self.currentLabelIndex = 0
                        self.animateRefreshStep1()
                    }
                    else {
                        self.isAnimating = false
                        self.currentLabelIndex = 0
                        for var i=0; i<self.labelsArray.count; ++i {
                            self.labelsArray[i].textColor = UIColor.blackColor()
                            self.labelsArray[i].transform = CGAffineTransformIdentity
                        }
                    }
            })
    })
}

}
导入UIKit
导入解析
进口螺栓
导入ParseUI
类事件ViewController:UIViewController、UITableViewDataSource、UITableViewDelegate{
var定时器:NSTimer!
var isAnimating=false
var currentColorIndex=0
var currentLabelIndex=0
var customView:UIView!
var labelsArray:Array=[]
var refreshControl:UIRefreshControl!
var testArray=[String]()
变量子数组=[String]()
@IBVAR表格视图:UITableView!
@ibvar-webView:UIWebView!
重写func viewDidLoad(){
super.viewDidLoad()
refreshControl=UIRefreshControl()
tableview.delegate=self
tableview.dataSource=self
refreshControl.addTarget(self,action:Selector(“loadEvents”),forControlEvents:UIControlEvents.ValueChanged)
self.tableview.addSubview(刷新控件)
loadEvents()
loadCustomRefreshContents()
//刷新控制颜色
refreshControl.backgroundColor=UIColor.clearColor()//背景颜色
refreshControl.tintColor=UIColor.clearColor()//指示器的颜色
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
func loadEvents()->Void{
testArray=[String]()
子数组=[String]()
let query=PFQuery(类名:“事件”)
让runkey=query.orderByDescending(“eventTitle”)
runkey.findObjectsInBackgroundWithBlock{
(对象:[PFObject]?,错误:N错误?->中的无效
如果错误==nil{
如果让objects=对象作为[PFObject]{
对于对象中的对象{
将load=object.objectForKey(“eventTitle”)设为!字符串
self.testArray.append(加载)
将subload=object.objectForKey(“日期”)设为!字符串
self.subArray.append(子加载)
//重新加载TableView
self.tableview.reloadData()
打印(self.testArray)
}
}
}否则{
打印(“错误:\(错误!)\(错误!.userInfo)”)
}
}
refreshControl.endRefreshing()
}
func do_table_refresh(){
dispatch\u async(dispatch\u get\u main\u queue()){
self.tableview.reloadData()
返回
}
}
func tableView(tableView:UITableView,didSelectRowAtIndexPath:nsindepath){
如果indexath.row==0{
self.performsguewithidentifier(“0a”,发送方:nil)
self.tableview.declerowatinexpath(indexPath,动画:true)
}
}
func tableView(tableView:UITableView!,numberofrowsinssection:Int)->Int{
返回testArray.count
}
func numberOfSectionsInTableView(tableView:UITableView)->Int{
返回1
}
func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{
让cell=tableView.dequeueReusableCellWithIdentifier(“eventcell”,forIndexPath:indexPath)作为!EventTableViewCell
cell.title.text=self.testArray[indexPath.row]
cell.subTitle.text=self.subArray[indexPath.row]
返回单元
}
//刷新tableview;开始刷新
func loadCustomRefreshContents(){
让refreshContents=NSBundle.mainBundle().loadNibNamed(“RefreshControl”,所有者:self,选项:nil)
customView=将内容[0]刷新为!UIView
customView.frame=refreshControl.bounds
对于变量i=0;i UIColor{
var colorsArray:Array=[UIColor.magentaColor(),UIColor.brownColor(),UIColor.yellowColor(),UIColor.redColor(),UIColor.greenColor(),UIColor.blueColor(),UIColor.orangeColor()]
如果currentColorIndex==colorsArray.count{
currentColorIndex=0
}
让returnColor=colorsArray[currentColorIndex]
++当前颜色索引
返回颜色
}
func doSomething(){
timer=NSTimer.scheduledTimerWithTimeInterval(4.0,目标:self,选择器:“endOfWork”,userInfo:nil,repeats:true)
self.do_table_refresh()
}
func endOfWork(){
refreshControl.endRefreshing()
timer.invalidate()
计时器=零
}
//动画的第一部分
func animateRefreshStep1(){
isAnimating=true
animateWithDuration(0.1,延迟:0.0,选项:UIViewAnimationOptions.CurveLinear,动画:{()->Void in
self.labelsArray[self.currentLabelIndex].transform=CGAffineTransformMakeRotation(CGFloat(M_PI_4))
self.labelsArray[self.currentLabelIndex].textColor=self.getNextColor()
},完成:{(已完成)->在中无效
UIView.animateWithDuration(0.05,延迟:0.0,选项:uiviewmanimationoptions.CurveLinear,动画:{()->Void in
self.labelsArray[self.currentLabelIndex].transform=CGAffineTransformity
self.labelsArray[self.currentLabelIndex].textColor=UIColor.blackColor()
},完成:{(已完成)->Void
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if (segue.identifier == "segueIdentifier"){

        let detailScene = segue.destinationViewController as! EventDetailViewController

        if let indexPath = self.tableView.indexPathForSelectedRow {
            let row = Int(indexPath.row)

            //here you can pass all the data to the destination viewController. But you CANT POPULATE YOUR LABELS. make sure you pass the data to some auxiliar variable(s). Next line is an example
            detailScene.selectedData = (self.myData[row] as! PFObject)
        }
    }
}
detailScene.selectedData = (self.myData[row] as! PFObject)
self.testArray[indexPath.row]
self.subArray[indexPath.row]
var testString:String!
var subString:String!
detailScene.test = self.testArray[row]
detailScene.sub = self.subArray[row]
self.articleTitle.text = testString