我正在尝试在我的iPhone项目中的两个视图之间共享一个字符串。它现在可以工作,如果我使用实际的@“这里的东西”的字符串,但如果我想使用像label.text这样的东西,它甚至不是它仍然是一个字符串。
我会告诉你我需要做些什么来使它更清楚。
第一视图:Info_ViewController.h
#import <UIKit/UIKit.h>
@interface Info_ViewController : UIViewController {
IBOutlet UITextField *locationField;
}
@property (nonatomic, retain) NSString *locationString;
+ (id)sharedInfoVC;
@end
第一个视图:Info_ViewController.m
#import "Info_ViewController.h"
static Info_ViewController *sharedInfoVC = nil;
@implementation Info_ViewController
@synthesize locationString;
#pragma mark Singleton Methods
+ (id)sharedInfoVC {
@synchronized(self) {
if (sharedInfoVC == nil)
sharedInfoVC = [[self alloc] init];
}
return sharedInfoVC;
}
- (id)init {
if (self = [super init]) {
locationString = [[NSString alloc] initWithString:locationField.text]; //This is there part I mentioned earlier, when using @"something" instead of locationField.text works.
}
return self;
}
第二个视图:Confirm_ViewController.m
#import "Confirm_ViewController.h"
#import "Info_ViewController.h"
@implementation Confirm_ViewController
- (IBAction)buttonZ:(id)sender
{
Info_ViewController *infoVCmanager = [Info_ViewController sharedInfoVC];
locationLabel.text = infoVCmanager.locationString;
}
我现在把它放在一个按钮下,但最终会在viewDidLoad下。 如果用一个字符串(@“blahblahblah”)替换locationField.text,它将不会崩溃并起作用。
当它崩溃时我收到错误:程序收到信号:“SIGABRT”
编辑:我尝试过更改
initWithString:locationField.text
到
initWithFormat:@"%@",locationField.text
现在我在第二个视图中的标签打印“(NULL)”
感谢您抽出宝贵时间提供建议,我真的很感激。
答案 0 :(得分:1)
将nil作为格式字符串传递给 - [NSString initWithString]是错误的。
那你怎么通过零呢?实际上你有两个的Info_ViewController实例。你有一个实例,它是你的应用程序的正常部分,然后你还有一个第二个实例,它是你的“单身人士”(它实际上不再是单身人士)。
所以在你的“singleton”实例中,UITextField是nil(并且将始终为nil),因此locationField.text为nil,你将它传递给initWithString:,这是一个崩溃。事实上,“单身人士”甚至没有像观察控制者那样完全烘焙。
如果您希望单例在应用程序的其他位置共享数据,那么它实际上不应该是Info_ViewController或任何类型的视图控制器。它应该是您用来管理数据的其他类。我会创建另一个类并将其实现为单例。
希望能帮助您了解这里发生的事情。
答案 1 :(得分:0)
预先“自我”。到您的位置字符串。
self.locationString = [[NSString alloc] initWithString:locationField.text];
答案 2 :(得分:0)
根据我对您的代码的理解,当您初始化viewController时,您从textfield获得了locationString的值。此时,您的文本字段将不可见。在它变得可见并输入内容之后,您没有将代码存储到locationString。
您应该做的是等待Info_ViewController对象初始化和显示。然后在按下某个按钮或其他事件时,从locationString分配locationLabel.text,甚至直接从locationField.text分配。
我会提供代码,但我不知道你是如何构建它的。如果您仍需要帮助,请提供详细信息。