Tag: 模型视图控制器

从视图控制器访问模型?

我正在创build一个iPhone应用程序,一个游戏,我正试图理解和拥抱MVC体系结构。 我打算创build一个模型,在这个例子中叫做HighScoresModel ,它负责保存我游戏中所有关于高分的信息。 应该在哪里创build这个模型? 在AppDelegate? 在第一个视图控制器? 其他视图控制器应该如何访问模型,以传递像addScore:withDifficulty:这样的addScore:withDifficulty:

UIModalTransitionStylePartialCurl不适用于iOS 8

我有与iOS7和以下版本绝对正常的代码。 但与Xcode6和iOS8 UIModalTransitionStylePartialCurl不起作用。 出现在第二卷的页面curl消失。 MyViewController* opts = [[MyViewController alloc] initWithView:someView]; opts.modalPresentationStyle = UIModalPresentationFullScreen; opts.modalTransitionStyle = UIModalTransitionStylePartialCurl; [self presentViewController:opts animated:YES completion:nil]; [编辑] – 我发现,如果构build完成xCode5.1并在iOS8上运行,按预期工作。 xCode6和iOS8有什么问题?

dismissModalViewControllerAnimated不起作用

我有一个UITabbarController与UINavigationController。 NavigationController中的视图呈现一个MVC(AddClockNavigationController)。 这个MVC有一个带有视图的笔尖和一个UINavigationController。 NavigationController.view作为子视图添加到MVC的视图中。 我的MVC中的NavigationController有两个button,一个取消和一个完成。 当按其中任何一个MVC应该被解雇。 这些button的IBActions在UINavigationController的视图(AddClockViewController)中,但是每当按下它们时,MVC都不会消失。 如果我把这些动作放到MVC中,它确实会消失。 如果我把这个函数放在我的MVC中,并使用[self.parentViewController myFunction]从我的viewController调用它,它不会消失。 我怎样才能让它从我的视野中消失? 我想我的ex is很乱,但我希望你能理解。 我的IB观点: 最好的祝福, 保罗·佩伦 编辑我已经尝试过[self dismissModalViewControllerAnimated:YES]; , [self.parentViewController dismissModalViewControllerAnimated:YES]; , [self.navigationController dismissModalViewControllerAnimated:YES]; , [self.parentViewController.navigationController dismissModalViewControllerAnimated:YES]; 如前所述,在父视图中使用一个函数来解除它。 没有任何工作

什么时候应该从closures的ViewController类中观察持续的Model类调用removeObserver:forKeyPath?

我有一个ViewController类,它有一个属性,我想在模型更改上观察属性。 在我的模型对象中,我有一个在我的应用程序的背景中定期更新的属性。 随着更新,我需要在我的ViewController执行代码。 为此,我在ViewController viewDidLoad方法中创build了一个观察者模型。 [ModelObject addObserver:self forKeyPath:@"State" options:NSKeyValueObservingOptionNew context:nil]; 正如你所看到的,这没有什么特别的,观察方法的行为,只要我离开我的屏幕上显示的视图。 如果我从父视图中删除上述视图,当我的ModelObject实例Mode属性更改时,我得到一个EXC_BAD_ACCESS错误消息。 具体来说,我的应用程序在更新Mode属性的行上崩溃,并且我在ModelObject实例内的以下代码行上收到最没用的EXC_BAD_ACCESS。 //This is located in a method that periodically toggles the value of "State" [self setState: 2]; 我会假设这个问题的解决scheme是从我的ViewController某个地方调用[ModelObject removeObserver: self forKeyPath:@"State"] ,当它从它的父级子视图数组中移除时。 不过,我在viewDidUnload方法中添加了一行代码,但是我发现viewDidUnload方法没有被调用。 我不确定这是否是正确的地方,但它需要去哪里。 我可能做错了什么? 我知道问题是KVO相关,因为如果我删除了观察,应用程序工作没有任何问题。 我的模型实例可以根据需要切换这个值,我的应用程序也不会崩溃。 我应该怎么做才能确保观察视图从其父视图的子视图中被移除时,我的观察者被正确地移除了?

在呈现模态时,“不鼓励在分离的视图控制器上呈现视图控制器”消息

我有一个导航控制器和根视图。 然后在那个根视图中,我推了一个视图,我必须点击以观察内容,如果login,如果没有logging它,它会打开一个模式视图控制器与下面的代码。 var vc = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController self.tabBarController!.presentViewController(vc, animated: true, completion: nil) 在viewdidload()我有一个nsnotification,以便我可以得到通知时,从login模式用户loggedinback NSNotificationCenter.defaultCenter().addObserver(self, selector: ("didDismissSecondViewController:"), name: "SecondViewControllerDismissed", object: nil) 在所有的工作之后,我在Login Controller中写下了下面的代码 self.dismissViewControllerAnimated(true, completion: {NSNotificationCenter.defaultCenter().postNotificationName("SecondViewControllerDismissed", object: nil, userInfo: nil)}); 所以在我的第一个视图控制器中,我写了下面的代码 func didDismissSecondViewController(sender: AnyObject) { NSLog("Called ns notifications") dispatch_async(dispatch_get_main_queue(),{ let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) if Reachability.isConnectedToNetwork() == true { let storyboard : […]

创build一个没有笔尖的视图控制器

在AppDelegate中,我想创build一个UIViewController子类并添加它的视图。 viw本身将在代码中指定 – 没有笔尖。 基于苹果文档,我应该使用 initWithNibName:nil bundle:nil]; 然后在控制器的loadView,我添加我的子视图等 但是,下面的下面的testing代码不适用于我。 我模拟了Apple的PageControl演示中的AppDelegate代码,只是因为我的应用程序将实现类似的结构(特别是基本控制器来pipe理分页滚动视图,以及其他控制器的数组来构build页面)。 但我怀疑我的AppDelegate代码是问题,因为日志loggingcertificateinitWithNibName ::和loadView都触发。 下面的应用程序运行,但屏幕是空白的。 我期待带有标签的绿色景观。 AppDelegate中 – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ScrollerController *controller = [[ScrollerController alloc] initWithNibName:nil bundle:nil]; [self.window addSubview:controller.view]; [self.window makeKeyAndVisible]; return YES; } ScrollerController (UIViewController子类) – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } […]

如何从当前视图控制器的实现文件加载另一个视图控制器?

我需要创build一个应用程序,它具有一个login/启动窗体,然后是一个自定义的Google地图。 我是新来的iOS编程,并试图快速学习这个应用程序所需要的东西。 所以,我已经创build了login表单的前端和后端,它的工作原理。 我有一个动作,这是由“login”button触发,这将validation凭据,并触发一个错误或呈现Google Map。 我想在另一个视图控制器中显示Google Map来控制另一个xib文件。 我创build了视图控制器和xib文件。 我的问题是如何加载另一个视图控制器从当前视图控制器的实施文件中放置的操作? 现在,我有这个代码: UIViewController *mapViewController = [[BSTGMapViewController alloc] initWithNibName:@"BSTGMapViewController" bundle:nil]; 我怎样才能使它成为窗口的“根视图控制器”,并可能具有转换(考虑到我的逻辑是好的:D)?

iOS:Objective-C中的事件监听器是什么?

在我的一些学习中,我看到有人提到,在你的视图控制器中,你可以有一个模型,并在模型上有某种监听器来进行改变。 我不认为我使用这些正确的名称,这可能是为什么我的search没有发现任何东西。 基本上我想将我的服务器调用从控制器移到我的模型中,但是我需要某种监听器来知道何时完成调用来更新视图。

iOS MVC – 来回传递数据来查看控制器和模型

我是新来的iOS编程,并写了一个简单的提醒风格的应用程序,我现在正在重写它来正确地实现MVC模型,因为以前我所有的代码是在视图控制器。 我有一个名为Event的属性名称,时间,重复等自定义类,然后结构如下: 模型类 从NSUserDefaults检索,处理和保存数据 RootViewController的 创buildModel对象的实例,并要求模型返回NSUserDefaults所有Events对象,然后将它们显示在UITableView EditEventViewController [editEventVC initWithEvent:theEvent]; 通过init方法传递在表格单元格中选定的特定事件对象,并显示可用于编辑的所有属性 EditEventPropertyViewController [editEventPropertyVC initWithValue:propertyValue]; 通过init方法传递属性的值(例如,事件名称),并通过委托方法返回用户更新的值 这是实现这个应用程序的正确方法? 使用EditEventViewController完成后,通过模型在NSUserDefaults保存更新的Event对象的最佳方法是什么? 通过代表? 目前,我正在重新加载在rootViewController的viewWillAppear的uitableview数据,所以它将不得不保存更新的数据之前再次检索它。 谢谢

使用AppDelegate共享数据

我发现了一些解释如何使用AppDelegate在iOS应用程序中的对象之间共享数据的资源。 我已经很轻松地实现了它,在我的情况下,这看起来是一个很好的方法。 思考使用AppDelegate可以做什么,我想知道应该在哪里画线。 显然还有其他的方式来跨视图控制器共享数据 ,使用Singleton对象和NSUserDefaults 。 什么时候使用AppDelegate共享数据是合适的? 在我目前的情况下,我使用这种方法来存储用于推送通知的appleDeviceToken。 当用户login或注销应用程序时,我使用该标记。 在MyAppDelegate.h我声明属性: @property (nonatomic, retain) NSString *appleDeviceToken; 在MyAppDelegate.m中我合成了AppleDeviceToken,然后设置它: @synthesize appleDeviceToken; —————————————————— – (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { NSString *devToken = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""] stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString: @" " withString: @""]; appleDeviceToken = devToken; } 然后,在我的LoginViewController.m我检索它并将其发布到我的服务器: NSString *urlForDeviceTokenPost = [NSString stringWithFormat: @"/api/users/%i/appleDeviceToken", userId]; MyAppDelegate *appDelegate = (MyAppDelegate*) [UIApplication sharedApplication].delegate; NSString […]