Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
Ios Swift中多节TableView的问题_Ios_Iphone_Swift_Uitableview_Core Data - Fatal编程技术网

Ios Swift中多节TableView的问题

Ios Swift中多节TableView的问题,ios,iphone,swift,uitableview,core-data,Ios,Iphone,Swift,Uitableview,Core Data,如果这让人困惑,我提前道歉。我是斯威夫特的新手,之前没有任何经验和知识 基本上,我有一个UITableView,它从另一个具有四个文本字段的viewController中提取数据。数据将保存并添加到tableView(仅显示单元格中的两个字段)。选定单元格后,它将返回到viewController,并将数据添加到相应的文本字段中。这还利用了CoreData和NSFetchResultsController。到目前为止,所有这些都正常工作,只是想对正在发生的事情提供一点支持 问题是。。。 我试图让

如果这让人困惑,我提前道歉。我是斯威夫特的新手,之前没有任何经验和知识

基本上,我有一个UITableView,它从另一个具有四个文本字段的viewController中提取数据。数据将保存并添加到tableView(仅显示单元格中的两个字段)。选定单元格后,它将返回到viewController,并将数据添加到相应的文本字段中。这还利用了CoreData和NSFetchResultsController。到目前为止,所有这些都正常工作,只是想对正在发生的事情提供一点支持

问题是。。。 我试图让tableView在两个部分中显示数据。我希望第一部分(第0部分)显示通过在viewController上添加文本字段而创建的列表中添加的数据。但是,tableView将第一行添加为第一节(标题正确),然后将第二行(和on)添加为第二节(第1节)(标题正确)。我想将viewController中的所有新项目添加到第0节,将第1节留空,以便我知道如何通过选择行(将来将出现)将项目从第0节中划掉并移动到第1节

我也是这个网站的新手,不知道如何发布我的代码。如果有人需要查看它,您可能需要引导我添加它。另外,我很难将目标C转换为Swift,请在回答时记住这一点。非常感谢。我为我的困难道歉

(tableView控制器“SList”)

(视图控制器“SLEdit”)


我认为问题在于您的FRC配置:

frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slitem", cacheName: nil)
因为
sectionNameKeyPath
slitem
,所以FRC会为
slitem
的每个不同值创建一个新节

如果使用
slcross
属性指示该项已从列表中划掉,请将其指定为
sectionNameKeyPath

frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slcross", cacheName: nil)
您还需要修改fetch请求的排序(必须对其进行排序,以便将给定部分中的所有项放在一起):


你能添加一些代码,这样我们就可以看到你到目前为止所做的尝试了吗?最终解决了…它有点混乱,但第一个和第二个是tableview控制器第三个是输入信息的view控制器。这基本上解决了它,除了两个问题…1:它为“一个节为节名键路径'slcross'返回了nil值。对象将被放置在未命名的部分“…这是因为在我“划掉它”(将来选择行)并将其添加到部分之前,部分中没有任何内容吗?2:添加/编辑项目时不会重新加载。我添加了tableview.reloadData()到sectionHeader代码的末尾,但它表示永远不会执行。是的,关于节的nil值的警告是因为
SList
项具有
slcross=nil
。设置默认值(false),然后当您划掉它时,您可以将其更改为true。关于重新加载问题,您不需要在
AddNew
IBAction中重新初始化frc和重新格式化获取,也不需要在ViewDidEvale中重新初始化。frc委托应负责更新表。很抱歉,响应延迟。我已将其从AddNew I中删除了重新初始化BAction和VIEWDID消失,直到我重新加载模拟器(停止,然后重新运行)它才会重新加载tableview。旁注…我将frc SECTIONNAME KEYPATH从“slcross”更改为nil,它似乎解决了重新加载问题,即使列表中没有任何内容,标题也会保持不变(这很好).当我最终将项目移动到该部分时,这会解决问题还是会导致问题?我假设(似乎是错误的)
slcross
是您用来表示项目已被划掉的属性。对
sectionNameKeyPath
使用
nil
暂时可以,但FRC只会将项目放在第一个部分。我的建议是在
SLItems
中添加一个布尔属性指示项目是否已被划掉。每当您创建新项目时,将默认值设置为false,当您划掉项目时,将其更改为true。如果您将该属性指定为
sectionNameKeyPath
,FRC将自动将相应的项目从第0节移到第1节。关于重新加载问题e、
reloadData
是一个相当迟钝的工具,对于正确配置的FRC,您不需要使用它。但是重新阅读您的代码后,我看不出FRC有任何问题:您使用的是最小FRC委托方法,
controllerDidChangeContent
,但这应该有效。
frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slitem", cacheName: nil)
frc = NSFetchedResultsController(fetchRequest: itemFetchRequest(), managedObjectContext: moc, sectionNameKeyPath: "slcross", cacheName: nil)
let primarySortDescription = NSSortDescriptor(key: "slcross", ascending: true)
let secondarySortDescription = NSSortDescriptor(key: "slitem", ascending: true)
fetchRequest.sortDescriptors = [primarySortDescription, secondarySortDescription]