- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在开发一些 Core Data 应用程序,并且只是为了练习而开发了一些其他应用程序。
我从网络上的每个人那里得到了大量帮助,在此先感谢您。
我的这个应用实际上什么都不做,它只是一个Core Data + CollectionView
实践。
无论如何,您应该添加一个新的 DataThing
并将其保存到核心数据中,然后将其显示在 CollectionView
中。
如果您单击该 Collection View ,您会加载 View Controller (用于添加新 View 的 View Controller ),但它会预先加载数据(或者这就是意图)。
最后,当您在实际添加之前“添加”时,应用程序会检查具有该标题的条目是否已存在,如果存在则应覆盖它,否则应保存一个新条目。
这是显示/加载 UICollectionView
的代码(请注意“did select”函数在崩溃后被注释掉了):
class ViewController: UIViewController {
@IBOutlet weak var addEntryBtn: UIButton!
@IBOutlet weak var xtraBtn: UIButton!
@IBOutlet weak var collectionView: UICollectionView!
let myAppDelegate = UIApplication.shared.delegate as! AppDelegate
var thingsLoaded: [DataThing]?
@IBAction func addEntryTapped(_ sender: Any) {
performSegue(withIdentifier: "addEntrySegue", sender: nil)
}
@IBAction func xtraTapped(_ sender: Any) {
//might be used to load?
viewDidLoad()
collectionView.reloadData()
}
override func viewDidLoad() {
super.viewDidLoad()
let context = myAppDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "DataThing")
request.returnsObjectsAsFaults = false
do
{
thingsLoaded = try context.fetch(request) as? [DataThing]
print ("Data Loaded")
}
catch
{
print ("Error Reading Data: \(error.localizedDescription)")
}
}
}
extension ViewController: UICollectionViewDataSource, UICollectionViewDelegate {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return thingsLoaded?.count ?? 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let customCell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath) as! CustomCVCell
if thingsLoaded != nil
{
customCell.titleLabel.text = thingsLoaded![indexPath.row].title
customCell.numberLabel.text = thingsLoaded![indexPath.row].number
customCell.noteLabel.text = thingsLoaded![indexPath.row].note
if thingsLoaded![indexPath.row].active {
customCell.statusView.backgroundColor = UIColor.green
} else {
customCell.statusView.backgroundColor = UIColor.red
}
}
return customCell
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// THIS WHOLE CHUNK OF CODE CREATES FATAL ERROR, FOUND NIL WHILE UNWRAPPING.
/*
let loadEntryVC = self.storyboard?.instantiateViewController(withIdentifier: "loadEntry") as! EntryVC
loadEntryVC.isActive.isOn = thingsLoaded![indexPath.row].active
loadEntryVC.titleText.text = thingsLoaded![indexPath.row].title
loadEntryVC.numberText.text = thingsLoaded![indexPath.row].number
loadEntryVC.noteText.text = thingsLoaded![indexPath.row].note
loadEntryVC.titleText.isEnabled = false
self.present(loadEntryVC, animated: true, completion: nil)
*/
}
}
这是“添加条目” View Controller 的代码。请注意,我注释掉了调用自定义获取函数导致游戏崩溃的部分:
class EntryVC: UIViewController {
var delegate: DeezNutsDelegate?
let myAppDelegate = UIApplication.shared.delegate as! AppDelegate
@IBOutlet weak var titleText: UITextField!
@IBOutlet weak var numberText: UITextField!
@IBOutlet weak var noteText: UITextField!
@IBOutlet weak var isActive: UISwitch!
@IBOutlet weak var addBtn: UIButton!
@IBAction func addTapped(_ sender: Any) {
let context = myAppDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "DataThing")
request.returnsObjectsAsFaults = false
// if let checkExist = DataThing.findByTitle(titleText.text!)
// {
// print ("HELLO WORLD!") NOTE JUST CALLING THE FUNCTION IN THIS SIMPLE MANNER MAKES THE APP CRASH.
// }
//check that this doesnt exist
// if let existingData = DataThing.findByTitle(titleText.text ?? "")
// {
// print ("DATA FOUND")
// //data already exists
// existingData.active = isActive.isOn
// existingData.number = numberText.text ?? "NA"
// existingData.note = noteText.text ?? "No Entry"
//
// print ("DATA OVEWRITTEN")
// } else {
print ("DATA DOES NOT EXISt, ATTEMPING NEW ONE!")
if let dataThing = NSEntityDescription.insertNewObject(forEntityName: "DataThing", into: context) as? DataThing {
dataThing.active = isActive.isOn
dataThing.title = titleText.text ?? "No Entry"
dataThing.number = numberText.text ?? "N.A."
dataThing.note = noteText.text ?? "No Entry"
print ("DATA STORED!")
}
//}
do
{
try context.save()
print ("CoreData: Game Saved!")
}
catch
{
print ("Error Saving Data: \(error.localizedDescription)")
}
self.dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
最后,这是获取 DataThings
的自定义函数:
class func findByTitle(_ title: String) -> DataThing? {
let myAppDelegate = UIApplication.shared.delegate as! AppDelegate
let context = myAppDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "DataThing")
let idPredicate = NSPredicate(format: "title = \(title)", argumentArray: nil)
request.predicate = idPredicate
var result: [AnyObject]?
var dataThingFound: DataThing? = nil
do {
result = try context.fetch(request)
} catch let error as NSError {
print("Error getting data: \(error)")
result = nil
}
if result != nil {
for resultItem : AnyObject in result! {
dataThingFound = resultItem as? DataThing
print ("DATA FOUND, RETURNING IT!")
}
}
return dataThingFound
}
编辑这是“按标题获取”崩溃的崩溃代码
2018-01-16 12:42:47.189960+0800 CoreData+Collections[819:9224] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath title2 not found in entity <NSSQLEntity DataThing id=1>'
*** First throw call stack:
(
0 CoreFoundation 0x0000000110a4112b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010c7e8f41 objc_exception_throw + 48
2 CoreData 0x000000010d1b1c71 -[NSSQLGenerator newSQLStatementForRequest:ignoreInheritance:countOnly:nestingLevel:nestIsWhereScoped:requestContext:] + 1649
3 CoreData 0x000000010d1bc880 -[NSSQLiteAdapter _statementForFetchRequestContext:ignoreInheritance:countOnly:nestingLevel:] + 144
4 CoreData 0x000000010d079c12 -[NSSQLiteAdapter newSelectStatementWithFetchRequestContext:ignoreInheritance:] + 130
5 CoreData 0x000000010d1fe613 -[NSSQLFetchRequestContext _createStatement] + 67
6 CoreData 0x000000010d1fe5bc -[NSSQLFetchRequestContext fetchStatement] + 172
7 CoreData 0x000000010d1ff63b -[NSSQLFetchRequestContext executeRequestCore:] + 27
8 CoreData 0x000000010d26449c -[NSSQLStoreRequestContext executeRequestUsingConnection:] + 204
9 CoreData 0x000000010d23955b __52-[NSSQLDefaultConnectionManager handleStoreRequest:]_block_invoke + 75
10 libdispatch.dylib 0x0000000111b6333d _dispatch_client_callout + 8
11 libdispatch.dylib 0x0000000111b6a235 _dispatch_queue_barrier_sync_invoke_and_complete + 392
12 CoreData 0x000000010d239443 -[NSSQLDefaultConnectionManager handleStoreRequest:] + 339
13 CoreData 0x000000010d241294 -[NSSQLCoreDispatchManager routeStoreRequest:] + 308
14 CoreData 0x000000010d1976c5 -[NSSQLCore dispatchRequest:withRetries:] + 229
15 CoreData 0x000000010d1945fd -[NSSQLCore processFetchRequest:inContext:] + 93
16 CoreData 0x000000010d07915b -[NSSQLCore executeRequest:withContext:error:] + 571
17 CoreData 0x000000010d17a08b __65-[NSPersistentStoreCoordinator executeRequest:withContext:error:]_block_invoke + 1691
18 CoreData 0x000000010d17221a -[NSPersistentStoreCoordinator _routeHeavyweightBlock:] + 378
19 CoreData 0x000000010d078ac4 -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 660
20 CoreData 0x000000010d0770e4 -[NSManagedObjectContext executeFetchRequest:error:] + 564
21 libswiftCoreData.dylib 0x000000010fe72f1a _T0So22NSManagedObjectContextC8CoreDataE5fetchSayxGSo14NSFetchRequestCyxGKSo0gH6ResultRzlF + 58
22 CoreData+Collections 0x000000010beb2f81 _T020CoreData_Collections0B5ThingC11findByTitleACSgSSFZ + 1105
23 CoreData+Collections 0x000000010bebc92d _T020CoreData_Collections7EntryVCC9addTappedyypF + 1069
24 CoreData+Collections 0x000000010bebe6f8 _T020CoreData_Collections7EntryVCC9addTappedyypFTo + 72
25 UIKit 0x000000010d5d3972 -[UIApplication sendAction:to:from:forEvent:] + 83
26 UIKit 0x000000010d752c3c -[UIControl sendAction:to:forEvent:] + 67
27 UIKit 0x000000010d752f59 -[UIControl _sendActionsForEvents:withEvent:] + 450
28 UIKit 0x000000010d751e86 -[UIControl touchesEnded:withEvent:] + 618
29 UIKit 0x000000010d649807 -[UIWindow _sendTouchesForEvent:] + 2807
30 UIKit 0x000000010d64af2a -[UIWindow sendEvent:] + 4124
31 UIKit 0x000000010d5ee365 -[UIApplication sendEvent:] + 352
32 UIKit 0x000000010df3aa1d __dispatchPreprocessedEventFromEventQueue + 2809
33 UIKit 0x000000010df3d672 __handleEventQueueInternal + 5957
34 CoreFoundation 0x00000001109e4101 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
35 CoreFoundation 0x0000000110a83f71 __CFRunLoopDoSource0 + 81
36 CoreFoundation 0x00000001109c8a19 __CFRunLoopDoSources0 + 185
37 CoreFoundation 0x00000001109c7fff __CFRunLoopRun + 1279
38 CoreFoundation 0x00000001109c7889 CFRunLoopRunSpecific + 409
39 GraphicsServices 0x00000001131e59c6 GSEventRunModal + 62
40 UIKit 0x000000010d5d25d6 UIApplicationMain + 159
41 CoreData+Collections 0x000000010bebaea7 main + 55
42 libdyld.dylib 0x0000000111bdfd81 start + 1
43 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
最佳答案
获取请求永远不会返回完全未指定的 AnyObject
。它至少返回 [NSFetchRequestResult]
,如果generic 请求更具体,则结果也更具体:这就是泛型的好处。
我建议使 findByTitle
成为一个实例方法,它会在您使用 do - catch
block 时抛出
错误。该方法将请求的 title
和上下文作为参数。该方法返回:
如果发生错误,则抛出错误(通过)。
func find(byTitle title: String, in context: NSManagedObjectContext) throws -> DataThing {
let request = NSFetchRequest<DataThing>(entityName: "DataThing")
request.predicate = NSPredicate(format: "title == %@", title)
let result = try context.fetch(request)
if let dataThing = result.first {
return dataThing
} else {
let dataThing = NSEntityDescription.insertNewObject(forEntityName: "DataThing", into: context) as! DataThing
dataThing.title = title
return dataThing
}
}
在 addTapped
中,首先检查文本字段是否为空。然后调用 find(byTitle
并分配其他值:
@IBAction func addTapped(_ sender: Any) {
let myAppDelegate = UIApplication.shared.delegate as! AppDelegate
let context = myAppDelegate.persistentContainer.viewContext
guard let title = titleText.text, !title.isEmpty else { return }
do {
let dataThing = try find(byTitle: title, in: context)
dataThing.active = isActive.isOn
dataThing.number = numberText.text ?? "NA"
dataThing.note = noteText.text ?? "No Entry"
try context.save()
print ("CoreData: Game Saved!")
} catch {
print ("Error Saving Data: \(error.localizedDescription)")
}
self.dismiss(animated: true, completion: nil)
}
关于swift - 覆盖核心数据(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265285/
Linux 有许多跨(假设是 2 个)CPU 内核执行的线程和进程。我希望我的单线程 C/C++ 应用程序成为 CPU0 上的唯一线程。我如何“移动”所有其他线程以使用 CPU1? 我知道我可以使用
我有一个类似于下图的数据库表 Table with 2 columns (UserId and value) 我将传递 UserId 和 2 个字符串。例如:userId: 1, key1: h1,
我想在我的新项目中使用 ASP.NET Core,因为我听说它更快。但是,该项目将使用广泛的数据库访问功能,Entity Framework Core 不支持其中一些功能。我想知道,是否可以使用 En
我已经使用 EntityFrameworkCore.SqlServer 2.0 开发了 asp .net core wep api 2.0 应用程序。它是使用数据库优先方法开发的。当尝试使用 dbco
我已经阅读了很多关于这个主题的文章,但我仍然无法处理这个问题。对不起,如果它是重复的,无论如何! 所以基本上,我正在从头开始构建一个 Angular 应用程序,并且我想按照最佳约定来组织我的代码。我有
我对MPI还是陌生的,所以如果这是一个琐碎的问题,请原谅我。我有一个四核CPU。我想运行一个在单个内核上使用两个进程的OpenMPI C++程序。有什么办法吗?如果是这样,那又如何?我提到了this
下面是一个传播异常处理机制的类问题,所需的输出是异常。任何人都可以解释为什么输出是异常,在此先感谢。 Class Question { public void m1() throws Excep
我想打印每个获得 CPU 时间片的进程的 name 和 pid。可能吗? 最佳答案 对于单个流程,您可以在以下位置获取此信息: /proc//stat 第14和第15个字段分别代表在用户态和内核态花费
我想知道是否可以识别具有特定 thread-id 的线程使用的物理处理器(核心)? 例如,我有一个多线程应用程序,它有两 (2) 个线程(例如,thread-id = 10 和 thread-id =
我有一个需要身份验证的 Solr 核心。假设我有一个用户,密码为password。当我现在尝试在控制台中创建一个 Solr 核心时 bin\solr create -c test 我收到 HTTP 错
我想为与使用它的项目不同的类库中的第二个和后续数据库创建迁移。有皱纹。我永远不会知道连接字符串,直到用户登录并且我可以从目录数据库 (saas) 中获取它。 对于目录数据库,我使用了来自 this 的
我想为一种可以产生 GHC Core 的简单语言创建一个前端。然后我想获取这个输出并通过正常的 GHC 管道运行它。根据this page , 不能直接通过 ghc 命令实现。我想知道是否有任何方法可
阅读文档,我构建了 2 个使用 BLE 连接 2 个 iDevices 的应用程序。 一个设备是中央设备,另一个是外围设备。 Central在寻找Peripheral,当找到它时,探索它的服务和特性,
在我的网络应用程序中,我对长时间运行的任务进行了操作,我想在后台调用此任务。因此,根据文档 .net core 3.1 Queued background tasks我为此使用这样的代码: publi
Solr 1.4 Enterprise Search Server 建议对核心副本进行大量更新,然后将其换成主核心。我正在按照以下步骤操作: 创建准备核心:http://localhost:8983/
它们是否存在,如果存在,文档和代码在哪里? 最佳答案 它们位于 Git 的 test 目录中。 https://github.com/jquery/jquery/tree/master/test 关于
我有一个 Lisp (SBCL 1.0.40.0.debian) 应用程序 (myfitnessdata),它使用以下代码来处理命令行参数: (:use :common-lisp) (:export
Core是GHC的中间语言。阅读Core可以帮助你更好地了解程序的性能。有人向我索要有关阅读 Core 的文档或教程,但我找不到太多。 有哪些文档可用于阅读 GHC Core? 这是我迄今为止发现的内
我有一个核心 WebJob 部署到 Azure Web 应用程序中。我正在使用WebJobs version 3.0.6 . 我注意到,WebJob 代码不会立即拾取对连接字符串和应用程序设置的更改(
我有一个在内部构造和使用 SqlConnection 类的第三方库。我可以从该类继承,但它有大量重载,到目前为止我一直无法找到合适的重载。我想要的是将参数附加到正在使用的连接字符串。 有没有办法在 .
我是一名优秀的程序员,十分优秀!