我看到使用 Swift 和 Xcode 7.2 的 Core Data 有一些非常奇怪的行为。下面是说明该问题的动画。
我创建了一个简单的示例,其中包含一个名为“Person”的实体,它只有一个“name”属性。我获取所有“人”实体并将它们显示在 TableView 中。如果我强制重新加载一个单元格,那么保存名称的 textLabel 和 NSManagedObject objectID 将不显示名称。但是,objectID 保持不变。这在设备和模拟器中都会发生。
我在“cellForRowAtIndexPath”中将 Person 实体的值打印到控制台,这样我就可以显示单元格最初加载时和重新加载时的值。
如您所见,尽管 NSManagedObject 似乎丢失了对其“Person”子类的所有引用,但它似乎仍然存在。
这里是受影响的 ViewController 的代码:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
let cellIdentifier = "PersonCell"
@IBOutlet weak var tableView: UITableView!
var people: NSArray = []
override func viewDidLoad() {
super.viewDidLoad()
people = fetchPeople()
}
func fetchPeople() -> NSArray {
let context = AppDelegate().managedObjectContext
let fetchRequest = NSFetchRequest(entityName: "Person")
let sort = NSSortDescriptor(key: "name", ascending: true)
fetchRequest.sortDescriptors = [sort]
do {
let results = try context.executeFetchRequest(fetchRequest)
return results
} catch {
let error = error as NSError
print("\(error.domain) \(error.code): \(error.localizedDescription)")
return []
}
}
// MARK: - UITableView methods
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return people.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath)
let person = people[indexPath.row]
print("in cellForRowAtIndexPath:")
print(people[0])
cell.textLabel?.text = "\(person.name) - \(person.objectID)"
return cell
}
}
感谢任何帮助。谢谢。
最佳答案
问题出在这里:
let context = AppDelegate().managedObjectContext
您创建应用程序委托(delegate)的新实例,并使用它
托管对象上下文。一旦程序控制从 fetchPeople() 返回,就不再有对上下文的引用,它是
释放。效果是访问托管对象的属性
在此上下文中创建的返回 nil。
您想要的是获得对(唯一)应用程序委托(delegate)的引用 及其托管对象上下文,例如
let context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
或者,将上下文传递给 View Controller
didFinishLaunchingWithOptions 方法或在
prepareForSegue 或适合您应用的任何内容。
关于ios - 在 UITableViewCell 返回 View 后,NSManagedObject 数据为 <fault> 且实体为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34999852/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c