我遇到这个问题,当我点击由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> = [];
}
这是我的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
}
}
}
答案 0 :(得分:0)
您需要从cidCTV = entry1.cid
方法移除cellForRowAtIndexPath
并将其移至didSelectRowAtIndexPath
,如下所示。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var entry1 : Entry = arrEntryInfo.newEntryArray[indexPath.row]
cidCTV = entry1.cid
}
问题是你没有在细胞选择上更新cidTV,但在细胞创建时不是正确的谷值。因为它始终具有最后创建的单元格的值。