Uitableview 写入事务中的域-首先在RLMRealm实例上调用beginWriteTransaction
由于未捕获的异常,我的应用程序正在终止: “RLMEException”,reason:“只能在写事务中添加、删除或创建域中的对象-首先在RLMRealm实例上调用beginWriteTransaction。” 我是使用Swift 3的新手,Swift 3的结构也发生了变化 下面是我的代码:Uitableview 写入事务中的域-首先在RLMRealm实例上调用beginWriteTransaction,uitableview,swift3,realm,ios10,Uitableview,Swift3,Realm,Ios10,由于未捕获的异常,我的应用程序正在终止: “RLMEException”,reason:“只能在写事务中添加、删除或创建域中的对象-首先在RLMRealm实例上调用beginWriteTransaction。” 我是使用Swift 3的新手,Swift 3的结构也发生了变化 下面是我的代码: #import RealmSwift override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: In
#import RealmSwift
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var todoItem: ToDoItem?
switch indexPath.section {
case 0:
todoItem = todos.object(at: UInt(indexPath.row)) as? ToDoItem
case 1:
todoItem = finished.object(at: UInt(indexPath.row)) as? ToDoItem
default:
fatalError("What the fuck did you think ??")
}
let realm = try! Realm() // 1
try! realm.write { () -> Void in
todoItem?.finished = !todoItem!.finished
}
tableView.reloadData()
}
func didFinishTypingText(_ typedText: String?) {
if (typedText?.utf16.count)! > 0 {
let newTodoItem = ToDoItem()
newTodoItem.name = typedText!
let realm = try! Realm() // 1
try! realm.write { () -> Void in//
{
realm.add(newTodoItem as! Object)
}
tableView.reloadData()
}
class ToDoItem : RLMObject
{
/*Every property that should be fetched and stored
in the database also needs the dynamic keyword.
Also, set the default values for the properties.*/
dynamic var name = ""
dynamic var finished = false
convenience init(name: String) {
self.init()
self.name = name
}
}
var todos: RLMResults<Object> {
get {
let predicate = NSPredicate(format: "finished == false", argumentArray: nil)
return ToDoItem.objects(with: predicate)
}
}
var finished: RLMResults<Object> {
get {
let predicate = NSPredicate(format: "finished == true", argumentArray: nil)
return ToDoItem.objects(with: predicate)
}
}
#导入RealmSwift
重写func tableView(tableView:UITableView,didSelectRowAt indexPath:indexPath){
var todoItem:todoItem?
开关indexPath.section{
案例0:
todoItem=todos.object(位于:UInt(indexPath.row))作为?todoItem
案例1:
todoItem=finished.object(位于:UInt(indexPath.row))作为?todoItem
违约:
法塔莱罗(“你他妈的怎么想的??)
}
让realm=try!realm()//1
试试!realm.write{()->Void in
todoItem?.finished=!todoItem!。finished
}
tableView.reloadData()
}
func didFinishTypingText(uuTypedText:String?){
如果(键入文本?.utf16.count)!>0{
设newTodoItem=ToDoItem()
newTodoItem.name=typedText!
让realm=try!realm()//1
试试!realm.write{()->Void in//
{
realm.add(newTodoItem作为!对象)
}
tableView.reloadData()
}
类ToDoItem:RLMObject
{
/*应该提取和存储的每个属性
在数据库中还需要动态关键字。
另外,设置属性的默认值*/
动态变量名称=“”
动态var finished=false
便利初始化(名称:字符串){
self.init()
self.name=名称
}
}
var todos:RLMResults{
得到{
let predicate=NSPredicate(格式:“finished==false”,argumentArray:nil)
返回到doItem.objects(带:谓词)
}
}
var完成:RLMResults{
得到{
let predicate=NSPredicate(格式:“finished==true”,argumentArray:nil)
返回到doItem.objects(带:谓词)
}
}
/-----------第二视图控制器--------/
导入UIKit
导入RealmSwift
类ReamTableViewController:UITableViewController,AddViewControllerDelegate{
var todos:结果{
得到{
let predicate=NSPredicate(格式:“finished==false”,argumentArray:nil)
返回到doItem.objects(带:谓词)
}
}
var已完成:结果{
得到{
let predicate=NSPredicate(格式:“finished==true”,argumentArray:nil)
返回到doItem.objects(带:谓词)
}
}
重写func viewDidLoad(){
super.viewDidLoad()
tableView.register(UITableViewCell.self,强制重用标识符:“CellIdentifier”)
setupNavigationBar()
}
func setupNavigationBar(){
navigationItem.rightBarButtonItem=UIBarButtonItem(barButtonSystemItem:.add,target:self,action:#选择器(RealmTableViewController.addButtonAction))
}
函数addButtonAction(){
让addViewController=addViewController(nibName:nil,bundle:nil)
addViewController.delegate=self
让navController=UINavigationController(rootViewController:addViewController)
存在(导航控制器,动画:真,完成:无)
}
重写func numberOfSections(在tableView:UITableView中)->Int{
返回2
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
开关段{
案例0:
返回整数(todos.count)
案例1:
返回Int(finished.count)
违约:
返回0
}
}
重写func tableView(tableView:UITableView,titleForHeaderInSection:Int)->String{
开关段{
案例0:
返回“待办事项”
案例1:
返回“已完成”
违约:
返回“”
}
}
重写func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
将cell=tableView.dequeueReusableCell(标识符为:“CellIdentifier”,for:indexPath)作为UITableViewCell
让index=UInt(indexath.row)
开关indexPath.section{
案例0:
如果让todoItem=todos.object(at:index)作为?todoItem{
让AttributeText=NSMutableAttributeString(字符串:todoItem.name)
AttributeText.addAttribute(NSStrikethrowStyleAttributeName,值:0,范围:NSMakeRange(0,AttributeText.length))
cell.textLabel?.attributedText=attributedText
}
案例1:
如果让todoItem=finished.object(at:index)作为?todoItem{
让AttributeText=NSMutableAttributeString(字符串:todoItem.name)
AttributeText.addAttribute(NSStrikethrowStyleAttributeName,值:1,范围:NSMakeRange(0,AttributeText.length))
cell.textLabel?.attributedText=attributedText
}
违约:
法塔莱罗(“你怎么想的?”)
}
返回单元
}
重写func tableView(tableView:UITableView,didSelectRowAt indexPath:indexPath){
var todoItem:todoItem?
开关indexPath.section{
案例0:
todoItem=todos.object(位于:UInt(indexPath.row))作为?todoItem
案例1:
todoItem=finished.object(位于:UInt(indexPath.row))作为?todoItem
违约:
法塔莱罗(“你怎么想的?”)
}
//让realm=RLMRealm.default()
//试试!realm.transactionWithBlock(){
//试试!realm.beginWriteTransaction()
让realm=try!realm()//1
试试!realm.write{()->Void in
todoItem?.finished=!todoItem!。finished
}
//}
tableView.reloadData()
}
func didFinishTypingText(uuTypedText:String?){
如果(键入文本?.utf16.count)!>0{
设newTodoItem=ToDoItem()
newTodoItem.name=typedText!
//让realm=RLMRealm.default()
让realm=try!realm()//1
试试!realm.write{()->Void in//
//试试!realm.transactionWithBlock(){
//realm.add(newTodoItem)
realm.add(newTodoItem)
//}
import UIKit
import RealmSwift
class RealmTableViewController: UITableViewController,AddViewControllerDelegate {
var todos: Results<Object> {
get {
let predicate = NSPredicate(format: "finished == false", argumentArray: nil)
return ToDoItem.objects(with: predicate)
}
}
var finished: Results<Object> {
get {
let predicate = NSPredicate(format: "finished == true", argumentArray: nil)
return ToDoItem.objects(with: predicate)
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "CellIdentifier")
setupNavigationBar()
}
func setupNavigationBar() {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(RealmTableViewController.addButtonAction))
}
func addButtonAction() {
let addViewController = AddViewController(nibName: nil, bundle: nil)
addViewController.delegate = self
let navController = UINavigationController(rootViewController: addViewController)
present(navController, animated: true, completion: nil)
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 2
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch section {
case 0:
return Int(todos.count)
case 1:
return Int(finished.count)
default:
return 0
}
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
switch section {
case 0:
return "To do"
case 1:
return "Finished"
default:
return ""
}
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellIdentifier", for: indexPath) as UITableViewCell
let index = UInt(indexPath.row)
switch indexPath.section {
case 0:
if let todoItem = todos.object(at: index) as? ToDoItem {
let attributedText = NSMutableAttributedString(string: todoItem.name)
attributedText.addAttribute(NSStrikethroughStyleAttributeName, value: 0, range: NSMakeRange(0, attributedText.length))
cell.textLabel?.attributedText = attributedText
}
case 1:
if let todoItem = finished.object(at: index) as? ToDoItem {
let attributedText = NSMutableAttributedString(string: todoItem.name)
attributedText.addAttribute(NSStrikethroughStyleAttributeName, value: 1, range: NSMakeRange(0, attributedText.length))
cell.textLabel?.attributedText = attributedText
}
default:
fatalError("What did you think ??")
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
var todoItem: ToDoItem?
switch indexPath.section {
case 0:
todoItem = todos.object(at: UInt(indexPath.row)) as? ToDoItem
case 1:
todoItem = finished.object(at: UInt(indexPath.row)) as? ToDoItem
default:
fatalError("What you think ??")
}
//let realm = RLMRealm.default()
//try! realm.transactionWithBlock() {
//try! realm.beginWriteTransaction()
let realm = try! Realm() // 1
try! realm.write { () -> Void in
todoItem?.finished = !todoItem!.finished
}
//}
tableView.reloadData()
}
func didFinishTypingText(_ typedText: String?) {
if (typedText?.utf16.count)! > 0 {
let newTodoItem = ToDoItem()
newTodoItem.name = typedText!
//let realm = RLMRealm.default()
let realm = try! Realm() // 1
try! realm.write { () -> Void in//
//try! realm.transactionWithBlock() {
//realm.add(newTodoItem)
realm.add(newTodoItem)
//}
}
tableView.reloadData()
}
}
}
try! realm.write {
....
}
realm.objects(ToDoItem.self).filter(predicate)