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