Objective c 使用ARC的自定义代理iOS 6不工作
我是一个用Objective-C编程的乞丐。 我在这里和其他网站上搜索了解决我问题的方法,但没有找到。 我想在系统加载之前创建一个登录视图。然后,在登录后,我想取消它。 在我的项目中,我使用ARC,而不使用故事板 当我调试并查看函数“efetuarLogin”时,property delegate的值是0x000000。我想它是空白的,不是吗? 根据我在网上找到的教程和其他提示,这是编写委派代码的正确方法。你能帮我查一下这个吗? 代码如下: Login.hObjective c 使用ARC的自定义代理iOS 6不工作,objective-c,ios,xcode,cocoa,delegates,Objective C,Ios,Xcode,Cocoa,Delegates,我是一个用Objective-C编程的乞丐。 我在这里和其他网站上搜索了解决我问题的方法,但没有找到。 我想在系统加载之前创建一个登录视图。然后,在登录后,我想取消它。 在我的项目中,我使用ARC,而不使用故事板 当我调试并查看函数“efetuarLogin”时,property delegate的值是0x000000。我想它是空白的,不是吗? 根据我在网上找到的教程和其他提示,这是编写委派代码的正确方法。你能帮我查一下这个吗? 代码如下: Login.h #import <UIKit/U
#import <UIKit/UIKit.h>
@class Login;
@protocol LoginDelegate <NSObject>
@required
- (void)loginDidFinish: (Login *)login;
@end
@interface Login : UIViewController{
__weak id<LoginDelegate> delegate;
}
@property (nonatomic, weak) id <LoginDelegate> delegate;
- (IBAction)efetuarLogin:(id)sender;
@end
主控制器
#import <UIKit/UIKit.h>
#import "Login.h"
@interface MainController : UITabBarController <LoginDelegate>
@end
并且该方法完成了AppDelegate.m的启动选项:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
mainController = [[MainController alloc] init];
window.rootViewController = mainController;
[window makeKeyAndVisible];
return YES;
}
抱歉,代码太多了。我已经很感激了
我正在使用ViewDidAspect方法向用户显示登录信息。但是当我退出并出现主控制器时,viewdiapper方法会再次创建登录。
如何显示登录一次?当我尝试在viewdidload上执行此操作时,它不起作用。创建
login
对象时,登录名未出现。在MainViewController.m
中
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
Login *login = [[Login alloc] initWithNibName:@"Login" bundle:nil];
login.delegate = self; //add this line
[login setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentViewController:login animated:NO completion:nil];
}
编辑:在问题中看到OP的编辑后(应该是另一个线程)
视图控制器层次结构错误。理想的流量应该是
1) 直接从应用程序代理显示登录控制器
2) 成功登录后,从登录控制器中显示MainViewController。Ok,成功!非常感谢。我认为需要在MainController上声明一个属性来保存登录对象。很高兴它对您有效,stackoverflow中已经讨论了创建委托的概念。当你们有时间的时候,读一读这篇文章,这篇文章内容丰富。如果你觉得这个答案正确/解决了问题,请。顺便说一句,第一个问题,你的结构非常好。再次感谢奎师那婆罗。我总是使用Stackoverflow(仅搜索和阅读),它总能解决我的许多问题!现在我明白了,应该“初始化”委托。顺便说一句,当我取消登录时,它再次出现。由于在viewdidload上实现,但如果在viewdidload上执行此操作,则不会显示登录。登录后,我在委托方法“loginDidFinish”[self dismissViewControllerAnimated:YES completion:nil]上调用此函数;我该如何登录才不会再次出现?卡利曼·博尔赫斯,不要用与原始问题完全不同的问题编辑原始问题。请将其作为其他问题发布,并将其重新编辑为原始形式。您在这里提出的一个问题是针对社区的,因此即使过了很多天,它也应该是可读的。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
mainController = [[MainController alloc] init];
window.rootViewController = mainController;
[window makeKeyAndVisible];
return YES;
}
- (void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
Login *login = [[Login alloc] initWithNibName:@"Login" bundle:nil];
login.delegate = self; //add this line
[login setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[self presentViewController:login animated:NO completion:nil];
}