我正在寻找一个最简单的例子,它显示一个窗口打开另一个窗口,然后关闭它.
我似乎陷入困境的地方是NIB以及如何连接插座.我可以很容易地创建窗口; 关闭它提出了挑战.
任何建议非常感谢!
我在下面附上我的代码.我认为我想要做的很简单,但它不起作用.感谢弗朗西斯,我现在可以打开和关闭窗口但是一旦我再次尝试打开它,应用程序崩溃(EXC_BAD_ACCESS).我确定这是因为我对NIB与班级的关系认识不足.在大多数语言中,我只需要实例化窗口的新实例然后关闭它.
我有2个窗户MainMenu.xib.(我更喜欢将窗口放在单独的NIB中,但这似乎会产生其他问题!)AppDelegate有2个出口,窗口(原始)和其他窗口(创建第2个窗口).
第一个窗口有2个按钮:" 打开窗口 "和" 关闭窗口 ",与代码中的2个方法连接.
码:
MyTestAppDelegate.h
#import <Cocoa/Cocoa.h>
@interface MyTestAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSWindow *otherWindow;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSWindow *otherWindow;
- (IBAction)openOtherWindow:(id)sender;
- (IBAction)closeOtherWindow:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
MyTestAppDelegate.c
#import "MyTestAppDelegate.h"
@implementation MyTestAppDelegate
@synthesize window;
@synthesize otherWindow;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
- (IBAction)openOtherWindow:(id)sender
{
[otherWindow makeKeyAndOrderFront:sender];
}
- (IBAction)closeOtherWindow:(id)sender
{
[otherWindow close];
}
@end
Run Code Online (Sandbox Code Playgroud) 我的app delegate中的handleOpenURL方法遇到了一些问题.我有一个应该正常显示的rootviewcontroller,但是当我的应用程序中打开一个文件时,我需要handleOpenURL方法来呈现一个新的viewcontroller并发送url信息.问题是我无法从我的app委托呈现模态视图控制器.此外,当我尝试在我的rootviewcontroller中调用一个方法来呈现我得到的modalviewcontroller时
Warning: Attempt to present ... whose view is not in the window hierarchy!
Run Code Online (Sandbox Code Playgroud)
所以,我想我只是在寻找能够呈现新的模态视图控制器并将url信息传递给该类的解决方案.这是app委托方法.
- (void)handleOpenURL:(NSURL *)url {
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
在我的窗口基础应用程序中,我需要从我的appdelegate导航到editorview,当我点击我的tabbarcontroller的第二项时,它将显示一个带有三个选项的动作表.
actionsheet工作正常,如果从tabbar中选择第二项,它将显示一个操作表.
但是当我选择行动表的第一个选项时,我需要推送到另一个视图
我在appdelegate中声明我的动作表.
我已经实现了actionsheetdelegate
该方法是trigerred,它可以显示我是否做nslog.但它无法推送到我想要的viewcontroller ..这是我的代码:
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (buttonIndex == 0)
{
DetailViewController *v2 = [[DetailViewController alloc] init];
NSLog(@"PUSH TRIGER");
[self.window.rootViewController.navigationController pushViewController:v2 animated:YES];
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我已经在我的故事板中嵌入了tabbarcontroller和导航控制器
我正在尝试将StackMob添加到我的项目中.它表示SMClient在将SDK拖动到项目后创建实例,选中"为...创建组"并添加到目标.我按照这些步骤.
但是,当我创建我的SMClient和SMCoreDataStore实例时,它给了我一个错误Receiver 'SMClient' for class message is a forward declaration和相同的错误SMCoreDataStore.这是我的代码:
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@class SMClient;
@class SMCoreDataStore;
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (strong, nonatomic) SMCoreDataStore *coreDataStore;
@property (strong, nonatomic) SMClient *client;
@end
Run Code Online (Sandbox Code Playgroud)
我的一部分.m:
#import "AppDelegate.h"
#import "StackMob.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.client = [[SMClient alloc] initWithAPIVersion:@"0" publicKey:@"YOUR_PUBLIC_KEY"];
self.coreDataStore …Run Code Online (Sandbox Code Playgroud) 我正在设置第一个viewController,它将出现在App Startup上.这是我的AppDelegate.h:
#import "AppDelegate.h"
#import "TutorialController.h" // a simple UIViewController
@implementation AppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
window.rootViewController = [[TutorialController alloc] init];
[window makeKeyAndVisible];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
它没有提供任何警报,但启动应用程序,在启动画面后,它只显示黑屏.没有那个代码一切正常.我不能在StoryBoard中这样做,因为在解决了这个问题后,我必须添加其他东西......可能出错了什么?谢谢!
我知道没有必要保留委托,以避免保留循环。我在一次采访中碰巧遇到了这个问题,“如果保留 appDelegate 会怎样?”。我对此没有答案,为了我的知识,在这里寻求答案。谢谢
我想ViewController在 AppDelegate.m 中调用的方法。我的方法中有 method() 。我Viewcontroller希望在调用 didSelectMethod() 时调用它appdelegate.m。我已经调用了这样的方法。-
ViewController *vc=[[ViewController alloc]init];
[vc method];
Run Code Online (Sandbox Code Playgroud)
方法被调用但与实际方法具有不同的实例。它具有所有nill价值。谁能给我正确的代码,我想要什么。
谢谢贾格维尔·拉纳
我必须创建AppDelegate的sharedInstance并在我的应用程序中使用任何地方.
我将Firebase升级v3到了,v4但是在接收消息方面遇到了一些问题,我收到了此警告:
[Firebase/Messaging] [I-FCM002019] FIRMessaging收到的数据消息,但是FIRMessagingDelegate的消息:didReceiveMessage:未实现
我知道我应该实现这个方法:
public func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage){
print(remoteMessage.appData)
//let title = remoteMessage.appData[("data"): {"title"}]
var title = "New Request"
for value in remoteMessage.appData{
if let value = value as? [AnyHashable:Any]{
print(value)
}
}
let message = "okay"
print(message)
self.showAlertAppDelegate(title: title ,message:message ,buttonTitle:"ok",window:self.window!)
print(title, message)
}
Run Code Online (Sandbox Code Playgroud)
但是我仍然有警告,所以我应该采取更多行动吗?
现在,我正在尝试使用Git中的一个名为Insomnia的类来防止设备在充电时锁定.如果你好奇的话,这个项目就在这里.对于示例代码,它让我这样做:
final class AppDelegate: UIResponder, UIApplicationDelegate {
private let insomnia = Insomnia(mode: .whenCharging)
//app delegate code
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它已声明AppDelegate为final使得insomnia变量未被释放,这将阻止它工作.但是,我不确定,这是不好的做法宣布我AppDelegate的final?或者这会导致我的应用程序出现问题吗?如果这是不好的做法,有没有更好的方法来确保insomnia不被解除分配?