Objective-C委托内存存储空问题

麦可

UIViewController在Objective-C的两个s之间遇到委托问题

我已经在与上一个UIViewController对话s中创建了一个委托UIViewController我在中宣布了代表的身份ConfirmDetailsViewController(这是在viewDidLoad和其他委托代码中声明的):

ForthViewController *delegate = [[ForthViewController alloc] init];

我还在文件的#import "ForthViewController.h"上方添加了正确@interface的名称.m

在稍后的几行中,我将一组本地属性NSStrings的值设置为delegate.nameString,这是NSString来自的另一组属性s ForthViewController,例如:

self.nameString = delegate.nameString;
self.emailAddressString = delegate.emailAddressString;
self.phoneNumberString = delegate.phoneNumberString;
self.emergencyPhoneNumberString = delegate.emergencyPhoneNumberString;
self.additionalDonationString = delegate.additionalDonationString;

然后我去打印的值self.nameStringself.emailAddressString用等控制台NSLog这样:

NSLog(@"Name: %@", self.nameString);
NSLog(@"Email Address: %@", self.emailAddressString);
NSLog(@"Phone Number: %@", self.phoneNumberString);
NSLog(@"Emergency Phone Number: %@", self.emergencyPhoneNumberString);
NSLog(@"Donation: $%@", self.additionalDonationString);

ForthViewController将本地属性对象的值分配给self.nameString等之后,我将其值打印到控制台并获取适当的值。然后,当我将对象转移到时ConfirmDetailsViewController,我将面对(null)所有字符串的值。

我相信最可能的错误是在中如何声明了委托ConfirmDetailsViewController,但是我在网上看到多个消息来源说这是您设置委托的方式。我如何获得适当的值以正确地通过代理抽水而不丢失其值并将其重置为null

如果您对我的解释有疑问,这里有一个示例项目的下载链接,此问题很明显:https : //www.dropbox.com/sh/66x89dciu4waxyd/AADdA3ehUglWIDWZGzG08Gqzpa

编辑

对于那些想知道的人,这就是我NSString在的.h文件ForthViewController和的.h文件中声明属性的方式ConfirmDetailsViewController

@property (strong, nonatomic) NSString *nameString;
@property (strong, nonatomic) NSString *emailAddressString;
@property (strong, nonatomic) NSString *additionalDonationString;
@property (strong, nonatomic) NSString *phoneNumberString;
@property (strong, nonatomic) NSString *emergencyPhoneNumberString;
建筑师钢琴家

据我所知,您没有从中获得好的价值,ForthViewController因为您是使用alloc / init创建的。您具有“代理”权限的对象与为所需属性具有适当值的对象不同。例如,在您提供的示例项目中,saveButton:永远不会为您设置为委托的对象调用方法。

那么,您应该如何设置呢?使用@protocol语法创建真实的委托。在第二个视图控制器的标头中定义协议,并使第一个视图控制器订阅该协议。然后添加delegate第二个视图控制器属性,该属性要求其值符合协议。创建第二个视图控制器的实例时,将其委托属性设置self为进行连接。现在,在第二个视图控制器代码中,您可以安全地在委托对象上调用协议中列出的任何方法。

这是一种委派模式,因为第二个视图控制器可以将消息分派给一个它完全不了解的对象。它所知道的只是其委托人可以接收其消息。

这是有关协议的独家新闻,直接从马口中得知。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章