当我向下滚动时,iOS swift数据与单元格不匹配

当我向下滚动时,iOS swift数据与单元格不匹配,ios,uitableview,swift,cell,Ios,Uitableview,Swift,Cell,我遇到了这个问题,当我单击segue准备的ReadMore按钮时,我得到了一个错误的值-->cidCTV(它是我数据库中的一个ID号)。代码中没有错误,只是无法将正确的值传递给下一个控制器。 另外,我做了一个println来测试单元格中加载的值,当我向下滚动时,在下一个单元格被完全查看之前,该值跳转到下一个单元格。 在我开始滚动之前,是否有办法将我的所有值(尤其是cidCTV)设置为所有单元格?或者是我的故事板排列错误还是什么 我的结构 class Entry : NSObject { var

我遇到了这个问题,当我单击segue准备的ReadMore按钮时,我得到了一个错误的值-->cidCTV(它是我数据库中的一个ID号)。代码中没有错误,只是无法将正确的值传递给下一个控制器。 另外,我做了一个println来测试单元格中加载的值,当我向下滚动时,在下一个单元格被完全查看之前,该值跳转到下一个单元格。
在我开始滚动之前,是否有办法将我的所有值(尤其是cidCTV)设置为所有单元格?或者是我的故事板排列错误还是什么

我的结构

class Entry : NSObject {

var color : String = String()
var divider : String = String()
var cid : String = String()


var image : String = String()
var heading : String = String()
var title : String = String()
var desc : String = String()
}

class ChapterData : NSObject {
var newEntryArray : Array<Entry> = [];
}
类条目:NSObject{
变量颜色:String=String()
变量分隔符:String=String()
变量cid:String=String()
变量图像:String=String()
变量标题:String=String()
变量标题:String=String()
var desc:String=String()
}
类ChapterData:NSObject{
var newEntryArray:Array=[];
}
这是我的ChapterTableViewController.swift

import Foundation
import UIKit

class ChapterTableViewController: UITableViewController {

var cidCTV : String = "";  

var pa55DB : COpaquePointer = nil
var selectStatement : COpaquePointer = nil;
var sqlString : String = "";

var arrEntryInfo : ChapterData = ChapterData()

override func viewDidLoad() {
    super.viewDidLoad()

    openDB()
    arrEntryInfo = executeSelect()

    println("Testing...")
}

func openDB() {
    var paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
    var docsDir = paths.stringByAppendingPathComponent("pa55.sqlite")

    if (sqlite3_open(docsDir, &pa55DB) == SQLITE_OK) {
        println("success open database")
    }
    else {
        println("failed to open database")
    }
}

func executeSelect() -> ChapterData   {
    sqlString = "SELECT * FROM Chapter where SHOW = 'true' ORDER BY CID ASC"
    var cSql = sqlString.cStringUsingEncoding(NSUTF8StringEncoding)
    sqlite3_prepare_v2(pa55DB, cSql!, -1, &selectStatement, nil)

    println("startment start")

    var localEntryInfo : ChapterData = ChapterData()

    while (sqlite3_step(selectStatement) == SQLITE_ROW) {
        var entryInfo: Entry = Entry()

        let cid_buf = sqlite3_column_text(selectStatement, 0)
        var cid1 = String.fromCString(UnsafePointer<CChar>(cid_buf))

        let image_buf = sqlite3_column_text(selectStatement, 3)
        var image1 = String.fromCString(UnsafePointer<CChar>(image_buf))

        let heading_buf = sqlite3_column_text(selectStatement, 1)
        var heading1 = String.fromCString(UnsafePointer<CChar>(heading_buf))

        let title_buf = sqlite3_column_text(selectStatement, 2)
        var title1 = String.fromCString(UnsafePointer<CChar>(title_buf))

        let desc_buf = sqlite3_column_text(selectStatement, 4)
        var description1 = String.fromCString(UnsafePointer<CChar>(desc_buf))

        let divider_buf = sqlite3_column_text(selectStatement, 5)
        var divider1 = String.fromCString(UnsafePointer<CChar>(divider_buf))

        let color_buf = sqlite3_column_text(selectStatement, 7)
        var color1 = String.fromCString(UnsafePointer<CChar>(color_buf))

        entryInfo.cid = cid1!;
        entryInfo.image = image1!;
        entryInfo.heading = heading1!;
        entryInfo.title = title1!;
        entryInfo.desc = description1!;
        entryInfo.divider = divider1!;
        entryInfo.color = color1!;

        localEntryInfo.newEntryArray.append(entryInfo)
    }
    println("select statement successful executed")
    return localEntryInfo
}

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

//MARK: navigation title

override func viewDidAppear(animated: Bool) {

    //navigation bar title image
    var nav = self.navigationController?.navigationBar

    let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 45, height: 32.5))
    imageView.contentMode = .ScaleAspectFit

    let image = UIImage(named: "we_logo.jpg")
    imageView.image = image

    navigationItem.titleView = imageView
    navigationController!.navigationBar.barTintColor = UIColor.whiteColor()
}


// MARK: - Table view data source

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

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return arrEntryInfo.newEntryArray.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! ChapterTableViewCell

    var entry1 : Entry  = arrEntryInfo.newEntryArray[indexPath.row]

    let color : NSString = entry1.color
    cell.dividerLabel.backgroundColor = hexStringToUIColor(color as String)

    cell.dividerLabel.text = entry1.divider
    cell.imageLabel.image = UIImage(named: entry1.image)
    cell.headingLabel.text = entry1.heading
    cell.titleLabel.text = entry1.title
    cell.descLabel.text = entry1.desc
    cell.readMoreButton.tag = (entry1.cid).toInt()!

    return cell
}

/*
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var entry1 : Entry = arrEntryInfo.newEntryArray[indexPath.row]
    cidCTV = entry1.cid
}
*/

@IBAction func shareChapter(sender: UIButton) {

    var shareChapter = "http://pa55.eu.pn/Pa55.html"

    let shareChapterC : UIActivityViewController = UIActivityViewController(activityItems: [shareChapter], applicationActivities: nil)

    self.presentViewController(shareChapterC, animated: true, completion: nil)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "ReadMoreSegue") {
        var svc = segue.destinationViewController as! ChapterStoryController;
        println("the cid value is \(cidCTV)")
    //    svc.dataPassed = cell.readMoreButton.tag
    }
}
}
<代码>导入基础 导入UIKit 类ChapterTableViewController:UITableViewController{ var-cidCTV:String=“”; var pa55DB:COpaquePointer=nil var selectStatement:copaquepenter=nil; var-sqlString:String=“”; var arrEntryInfo:ChapterData=ChapterData() 重写func viewDidLoad(){ super.viewDidLoad() openDB() arrEntryInfo=executeSelect() println(“测试…”) } func openDB(){ var path=NSSearchPathForDirectoriesInDomains(.DocumentDirectory、.UserDomainMask,true)[0]作为!字符串 var docsDir=path.stringByAppendingPathComponent(“pa55.sqlite”) 如果(sqlite3_打开(docsDir和pa55DB)==SQLITE_正常){ println(“成功打开数据库”) } 否则{ println(“打开数据库失败”) } } func executeSelect()->ChapterData{ sqlString=“从章节中选择*,其中显示='true'按CID ASC排序” var cSql=sqlString.cStringUsingEncoding(NSUTF8StringEncoding) sqlite3\u prepare\u v2(pa55DB,cSql!,-1,&selectStatement,nil) println(“启动”) var localEntryInfo:ChapterData=ChapterData() while(sqlite3\u步骤(selectStatement)=SQLITE\u行){ var entryInfo:Entry=Entry() 让cid\u buf=sqlite3\u column\u text(selectStatement,0) var cid1=String.fromCString(非安全指针(cid_buf)) 让image\u buf=sqlite3\u column\u text(selectStatement,3) var image1=String.fromCString(UnsafePointer(image_buf)) 让标题\u buf=sqlite3\u列\u文本(selectStatement,1) var heading1=String.fromCString(UnsafePointer(heading_buf)) 让title\u buf=sqlite3\u column\u text(selectStatement,2) var title1=String.fromCString(UnsafePointer(title_buf)) 让desc\u buf=sqlite3\u column\u text(selectStatement,4) var description1=String.fromCString(未安全指针(desc_buf)) 让分隔符\u buf=sqlite3\u列\u文本(selectStatement,5) var divider1=String.fromCString(UnsafePointer(divider_buf)) 让color\u buf=sqlite3\u column\u text(selectStatement,7) var color1=String.fromCString(UnsafePointer(color\u buf)) entryInfo.cid=cid1!; entryInfo.image=image1!; entryInfo.heading=heading1!; entryInfo.title=title1!; entryInfo.desc=描述1!; entryInfo.divider=divider1!; entryInfo.color=color1!; localEntryInfo.newEntryArray.append(entryInfo) } println(“select语句成功执行”) 返回localEntryInfo } 重写函数didReceiveMemoryWarning(){ 超级。我收到了记忆警告() //处置所有可以重新创建的资源。 } //标记:导航标题 覆盖功能视图显示(动画:Bool){ //导航栏标题图像 var nav=self.navigationController?.navigationBar 让imageView=UIImageView(帧:CGRect(x:0,y:0,宽度:45,高度:32.5)) imageView.contentMode=.ScaleSpectFit 让image=UIImage(名为:“we_logo.jpg”) imageView.image=image navigationItem.titleView=imageView navigationController!.navigationBar.barTintColor=UIColor.whiteColor() } //标记:-表视图数据源 重写func numberOfSectionsInTableView(tableView:UITableView)->Int{ 返回1 } 重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{ 返回arrEntryInfo.newEntryArray.count } 重写func tableView(tableView:UITableView,cellForRowAtIndexPath:nsindepath)->UITableView单元格{ var cell=tableView.dequeueReusableCellWithIdentifier(“cell”,forIndexPath:indexPath)as!ChapterTableViewCell var entry1:Entry=arrEntryInfo.newEntryArray[indexPath.row] let color:NSString=entry1.color cell.dividerLabel.backgroundColor=hexStringToUIColor(颜色为字符串) cell.dividerLabel.text=entry1.divider cell.imageLabel.image=UIImage(名称:entry1.image) cell.headingLabel.text=entry1.heading cell.titleLabel.text=entry1.title cell.descLabel.text=entry1.desc cell.readMoreButton.tag=(entry1.cid).toInt()! 返回单元 } /* 重写func tableView(tableView:UITableView,didSelectRowAtIndexPath:nsindepath){ var entry1:Entry=arrEntryInfo.newEntryArray[indexPath.row] cidCTV=entry1.cid } */ @iAction func shareChapter(发件人:UIButton){ var shareChapter=”http://pa55.eu.pn/Pa55.html" 让shareChapterC:UIActivityViewController=UIActivityViewController(activityItems:[shareChapter],应用程序活动:nil) self.presentViewController(shareChapterC,动画:true,完成:nil) } 重写func prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject!){ 如果(segue.identifier==“ReadMoreSegue”){ var svc=segue.destinationViewController as!ChapterStoryController; println(“cid值为\(cidCTV)”) //svc.dataPassed=cell.readMoreButton.tag } } }
您需要从中删除
cidCTV=entry1.cid
<
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     var entry1 : Entry  = arrEntryInfo.newEntryArray[indexPath.row]
     cidCTV = entry1.cid
}