- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 View Controller ,名为 ScorecardViewController
,其中包含 UITableView
,称为 HolesTable
,它由 FetchedResultsController
正确填充.
但是,当用户编辑任何数据时,FRC delegate
都不会出现。方法被调用 - 即我在每个 FRC delegate
上设置了断点方法,但没有被触发。
ScorecardViewController
是 HolesTable
的代表 并实现其工作所需的一组方法。另外, HolesTable
,有它的数据源和 delegate
在 IB 中设置为 ScorecardViewController
。
对于上下文,在应用程序的其他地方,我有一个几乎相同的设置,工作正常。我有一个 View Controller , CourseViewController
,其中托管 UITableView
,ScorecardTable
,它有一个链接到它的 FRC。
ScorecardTable
从 FRC 和所有 FRC delegate
正确填充方法按预期触发。
经过对我的代码进行广泛审查并在线研究后,我得出结论,我错过了连接 HoleTable
的某个步骤。 到 FRC delegate
,但我无法弄清楚这种情况发生在哪里,因为我对两个 VC 的检查没有显示任何明显的东西。
还有什么我可能会错过的吗?我可以发布什么代码来帮助确定问题出在哪里?
谢谢!
--更新1
FRC 的定义如下:
fileprivate lazy var fetchedResultsController: NSFetchedResultsController<Hole> = {
// Create Fetch Request
let fetchRequest: NSFetchRequest<Hole> = Hole.fetchRequest()
// Configure Fetch Request
self.teeColourString = self.scorecard?.value(forKey: "teeColour") as! String?
fetchRequest.predicate = NSPredicate(format: "%K == %@ AND %K == %@", "appearsOn.offeredAt.name", self.courseName!, "appearsOn.teeColour", self.teeColourString!)
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "holeNumber", ascending: true)]
// Create Fetched Results Controller
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.coreDataManager.mainManagedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
// Configure Fetched Results Controller
fetchedResultsController.delegate = self
return fetchedResultsController
}()
FRC 运行良好,并且填充了连接的 tableView
对象,HoleTable
.
Hole
表包含三个整数列 HoleNum
, Par
和StrokeIndex
。我有一个自定义单元格,HoleTableViewCell
这些值显示在 HoleTable
内.
Par
和StrokeIndex
可以通过HoleTable
的实例进行更新用户直接编辑单元格。 `HoleTableViewCell' 的代码是:
class HoleTableViewCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var holeNumLabel: UILabel!
@IBOutlet weak var SIField: UITextField!
@IBOutlet weak var parField: UITextField!
static let reuseIdentifier = "HoleTableViewCell"
func textFieldDidBeginEditing(_ textField: UITextField) {
print("Editing started")
}
func textFieldDidEndEditing(_ textField: UITextField) {
if textField.tag == 4 {
//ParField has been edited
print("Par is now " + textField.text!)
} else if textField.tag == 5 {
// SIField has been edited
print("SI is now " + textField.text!)
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
SIField.delegate = self
SIField.tag = 4
parField.delegate = self
parField.tag = 5
}
}
在运行时,编辑文本字段 SIField
和parField
触发器textFieldDidBeginEditing
和textFieldDidEndEditing
正如我所期望的。
不会触发 FRC 委托(delegate)方法。这些是在 UITableView 的类中定义的,ScorecardViewController
其中FetchedResultsControllerDelegate
协议(protocol)方法已设置。
--更新2
经过进一步调查,我认为 FRC 委托(delegate)方法未触发的原因是 FRC 后面的托管对象上下文没有发生更新。
我将进一步研究这个问题,看看是否有一种简单的方法可以实现这一点。
最佳答案
事实证明,这个问题的解决方案很简单,但需要一些脑细胞才能弄清楚。
缺少的部分是我需要将对对象的引用从 HolesTable
TableView 传递到“HoleTableViewCell”单元格,以便我在单元格方法中进行的编辑触发 FRC 委托(delegate)方法。
新类“HoleTableViewCell”定义如下所示:
import UIKit
import CoreData
class HoleTableViewCell: UITableViewCell, UITextFieldDelegate {
@IBOutlet weak var holeNumLabel: UILabel!
@IBOutlet weak var SIField: UITextField!
@IBOutlet weak var parField: UITextField!
var hole: Hole?
static let reuseIdentifier = "HoleTableViewCell"
func textFieldDidBeginEditing(_ textField: UITextField) {
print("Editing started")
}
// This will need beefing up to enforce rules for Par and SI
func textFieldDidEndEditing(_ textField: UITextField) {
if textField.tag == 4 || textField.tag == 5 {
//ParField has been edited
//Prepare the Hole record for sending back to calling controller
hole?.setValue(Int(parField.text!), forKeyPath: "par")
hole?.setValue(Int(SIField.text!), forKey: "strokeIndex")
}
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
SIField.delegate = self
SIField.tag = 4
parField.delegate = self
parField.tag = 5
}
}
并且,在保存单元格的 UITableView
的类定义中,需要以下内容:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: HoleTableViewCell.reuseIdentifier, for: indexPath) as? HoleTableViewCell else {
fatalError("Unexpected Index Path")
}
// Fetch Holes
let hole = fetchedResultsController.object(at: indexPath)
// Pass the hole to the cell instance so edits in situ will trigger FRC delegate methods
cell.hole = hole
return cell
}
关于swift - FRC 填充 TableView 但 FetchedResultsController 委托(delegate)方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45398240/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!