我正在尝试让我的一个视图为用户提供将他们编辑的数组重置为原始形式的选项。我目前正在尝试使用 NSNotificationCenter 执行此操作。
当前流程:
-
用户翻阅一系列卡片,每张卡片都是从数组实验中提取的(事先已经洗牌,但我认为这与这个问题无关),并在数组循环时删除他们不想再次看到的卡片。
-
用户决定要从一个新的阵列重新开始。
-
用户单击"主页",即可进入 AdditionalMenuViewController.swift该控制器与 NSNotification Center 一起设置,@IBAction触发模型控制器将侦听的通知。这是额外的菜单视图控制器.swift。
let mySpecialNotificationKey = "com.example.specialNotificationKey" class AdditionalMenuViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: "resetArray", name: mySpecialNotificationKey, object: nil) } @IBAction func notify(){ NSNotificationCenter.defaultCenter().postNotificationName(mySpecialNotificationKey, object: self) } func resetArray() { println("done") } }
-
这应该会触发模型控制器中的侦听器重置数组,然后允许用户继续使用应用程序,但重置数组。以下是ModelController的相关部分.swift:
class ModelController: NSObject, UIPageViewControllerDataSource { var experiments = NSMutableArray() var menuIndex = 0 func shuffleArray(inout array: NSMutableArray) -> NSMutableArray { for var index = array.count - 1; index > 0; index-- { // Random int from 0 to index-1 var j = Int(arc4random_uniform(UInt32(index-1))) // Swap two array elements // Notice '&' required as swap uses 'inout' parameters swap(&array[index], &array[j]) } return array } override init() { super.init() // Create the data model. if let path = NSBundle.mainBundle().pathForResource("experiments", ofType: "plist") { if let dict = NSDictionary(contentsOfFile: path) { experiments.addObjectsFromArray(dict.objectForKey("experiments") as NSArray) } } println(experiments) shuffleArray(&experiments) println(experiments) NSNotificationCenter.defaultCenter().addObserver(self, selector: "resetArray", name: mySpecialNotificationKey, object: nil) } func resetArray() { if let path = NSBundle.mainBundle().pathForResource("experiments", ofType: "plist") { if let dict = NSDictionary(contentsOfFile: path) { experiments.addObjectsFromArray(dict.objectForKey("experiments") as NSArray) } } shuffleArray(&experiments) }
目前它确实创建了一个新数组,但它的大小是原始数组的两倍,这告诉我它同时运行原始和重置函数。它还破坏了您可以在 Xcode 中默认的基于页面的应用程序中找到的所有 pageViewController 功能。
我在这里错过了什么?
如何重置阵列,然后将用户放回基于页面的应用程序流中?
> rdelmar的建议非常有效。我现在清除数组,然后用新洗牌的数组填充它。