gpt4 book ai didi

ios - 如何通过协议(protocol)/委托(delegate)传递 NSManagedObject?

转载 作者:行者123 更新时间:2023-11-28 13:14:37 26 4
gpt4 key购买 nike

我定义了一个托管对象:

@objc (Game)
class Game: NSManagedObject {
@NSManaged var player1: Player
@NSManaged var player2: Player
@NSManaged var totalScore: NSNumber
@NSManaged var gameDate: NSDate
}

我从 ViewControllerA 初始化它,然后使用委托(delegate)模式将它交给 ViewControllerB。协议(protocol)如下所示:

protocol gameProtocol {
func gameFunction(input: Game)
}

ViewControllerB 注册协议(protocol):

class ViewControllerB: UIViewController, gameProtocol {...}

并实现此功能以符合:

func gameFunction(input: Game) {
let currentGame = input
}

然后 ViewControllerA 可以发送一个 Game 对象到 VCB,如下所示:

var gameDelegate: gameProtocol!
gameDelegate.gameFunction(myInitializedAndSavedGameObject)

一切正常,但我需要在 ViewControllerB 中有一个类级变量,以便可以编写其他代码以依赖于游戏。这当然行不通:

var currentGame = Game()
func gameFunction(input: Game) {
currentGame = input
}

我不知道用什么词来形容它,但我想我想要一个已初始化的空 Game 对象。我想我可以编写一个方便的 init 来制作一个临时游戏,但这似乎不是一个好主意。

我目前的解决方法是使用 NSManagedObjectID(),然后根据 ID 重新创建对象。但这是很多重复的代码,以获取一个对象,该对象是该 ViewController 旨在使用的对象的核心。

最佳答案

所以你想将你的 NSManagedObject 推送到你的第二个 View Controller ?- 你不需要委托(delegate),你可以将你的对象作为实例变量发送,正如 Wain 已经说过的那样。

例如(在您的 MainViewController 中)

class MainViewControntroller: UIViewController {
var currentGameObject:YOURNSMANAGEDOBJECT!

func viewDidLoad() {
// load your Object
var fetchRequest = NSFetchRequest(entityName: "Game")
.....
games = context.executeFetchRequest(fetchRequest, error: nil) as [YOURNSMANAGEDOBJECT]

if(games.count > 0) {
// set to any game object (here is only the last)
currentGameObject = games.last?
}
}

}

//初始化你的第二个 View Controller (例如当使用 segues 时)

if(segue.identifier == "yourIdentifierInStoryboard") {

var yourNextViewController = (segue.destinationViewController as yourNextViewControllerClass)
yourNextViewController.currentGameObject = currentGameObject

所以你可以在你的 SecondViewController 中使用你的 NSManagedObject - 如果你想把它推回去,你可以使用一个委托(delegate)。

关于ios - 如何通过协议(protocol)/委托(delegate)传递 NSManagedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29538524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com