2015-04-23 14 views
0

我有我的應用程序的註釋部分,我可以創建註釋和編輯註釋,但是當涉及到刪除註釋時,我有一個問題。我可以從表格視圖本身和所有註釋中刪除它們,但是當我重新加載應用程序時,它們會返回,就好像它們粘在字典中一樣。你能否請求我永久刪除它們?我有三個控制器,只有兩個是相關的。以下是相關的:注意事項不會刪除

MasterViewController.swift

import UIKit 

class MasterViewController: UITableViewController { 

@IBOutlet weak var menuButton: UIBarButtonItem! 

override func awakeFromNib() { 
    super.awakeFromNib() 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    Note.loadnotes() 
    noteTable = self.tableView 
    // Side Menu 
    if self.revealViewController() != nil { 
     menuButton.target = self.revealViewController() 
     menuButton.action = "revealToggle:" 
     self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer()) 
    } 
    // Do any additional setup after loading the view, typically from a nib. 

func insertNewObject(sender: AnyObject) { 
    allNotes.insert(Note(), atIndex: 0) 
    let indexPath = NSIndexPath(forRow: 0, inSection: 0) 
    self.tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic) 
    self.performSegueWithIdentifier("showDetail", sender: self) 
} 

// MARK: - Segues 

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
     if let indexPath = self.tableView.indexPathForSelectedRow() { 
      let object: Note = allNotes[indexPath.row] as Note 
      currentNoteIndex = indexPath.row 
     } 
     else { 
      currentNoteIndex = 0 
     } 
    } 
} 

// MARK: - Table View 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return allNotes.count 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell 

    let object: Note = allNotes[indexPath.row] 
     as Note; cell.textLabel!.text = object.note 
    return cell 
} 


override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 
     allNotes.removeAtIndex(indexPath.row) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    } else if editingStyle == .Insert { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 
    } 
} 


} 

note.swift提前

import UIKit 

var allNotes:[Note] = [] 
var currentNoteIndex:NSInteger = -1 
var noteTable:UITableView? 

let KAllNotes:String = "notes" 


class Note: NSObject { 
var date:String 
var note:String 

override init() { 
    date = NSDate().description 
    note = "" 
} 

func dictionary() -> NSDictionary { 
    return ["note":note, "date":date] 
} 

class func saveNotes() { 
    var aDictionaries:[NSDictionary] = [] 
    for (var i:NSInteger = 0; i < allNotes.count; i++) { 
     aDictionaries.append(allNotes[i].dictionary()) 
    } 
    NSUserDefaults.standardUserDefaults().setObject(aDictionaries, forKey: KAllNotes) 
    //  aDictionaries.writeToFile(filePath(), atomically: true) 
} 

class func loadnotes() { 
    var defaults:NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    var savedData:[NSDictionary]? = defaults.objectForKey(KAllNotes) as? [NSDictionary] 
    //  var savedData:NSArray? = NSArray(contentsOfFile: filePath()) 
    if let data:[NSDictionary] = savedData { 
     for (var i:NSInteger = 0; i < data.count; i++) { 
      var n:Note = Note() 
      n.setValuesForKeysWithDictionary(data[i] as [NSObject : AnyObject]) 
      allNotes.append(n) 
     } 
    } 
} 

class func filePath() -> String { 
    var d:[String]? = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.AllDomainsMask, true) as? [String] 
    if let directories:[String] = d { 
     var docsDirectory:String = directories[0] 
     var path:String = docsDirectory.stringByAppendingPathComponent("\(KAllNotes).notes") 
     return path; 
    } 
    return "" 
} 
} 

感謝 山姆

+2

1)請將所有代碼縮小到與刪除問題相關的部分。 2)刪除記事後,你會在哪裏試圖保存數據? – rmaddy

+0

在MasterViewController中,最後一個覆蓋功能是刪除部分 – ShizukaNaHaji

+0

您是否將保存的文檔保存在文檔目錄中? KAllNotes.notes文件包含的內容 –

回答

1

在主視圖控制器使用此功能改變:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 
     allNotes.removeAtIndex(indexPath.row) 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
     Note.saveNotes() 
    } else if editingStyle == .Insert { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. 
    } 
} 

這將強制重新保存字典。使用notes.swift中的保存筆記功能