我这里有一单是头文件:辛格尔顿没有更新变量立即
#import <Foundation/Foundation.h>
@interface Shared : NSObject
{
NSString *messages;
}
@property (nonatomic, retain) NSString *messages;
+ (Shared*)sharedInstance;
@end
下面是执行:
#import "Shared.h"
static Shared* sharedInstance;
@implementation Shared
@synthesize messages;
+ (Shared*)sharedInstance
{
if (!sharedInstance)
{
sharedInstance = [[Shared alloc] init];
}
return sharedInstance;
}
- (id)init
{
self = [super init];
if (self)
{
messages = [[NSString alloc] init];
}
return self;
}
@end
的问题是,当我使用
[Shared sharedInstance].messages = someVariable;
我可以使用 NSLog([Shared sharedInstance] .messages); 它显示正确的输出,但是当我从另一个类检查时,NSLog不显示任何输出。我在另一个类的viewDidLoad方法中有NSLog,所以当我点击一个按钮进入下一个视图时,它应该输出字符串的值,但它只能第二次运行。如果变量设置为狗,首先它不输出,然后当我关闭视图并再次尝试时,它输出狗。但是,如果我然后将变量更改为cat,它将输出dog,并在下一次尝试时输出cat。我希望它立即更新,而不是始终保持一个。
编辑:下面是来自其它类 这种特定部分是从一个视图控制器类中的方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Omitted, just preparing the DB, and emptying the array.
if ([db open])
{
FMResultSet *s = [db executeQueryWithFormat:@"SELECT ShabadID FROM Shabad WHERE Gurmukhi LIKE %@", currentLine];
while ([s next])
{
lineID = [s intForColumn:@"ShabadID"];
}
s = [db executeQueryWithFormat:@"SELECT Gurmukhi, ShabadID FROM Shabad WHERE ShabadID LIKE %i", lineID];
while ([s next])
{
//NSLog([s stringForColumn:@"Gurmukhi"]);
[paragraphArray addObject:[s stringForColumn:@"Gurmukhi"]];
}
Text = @"";
for (int i = 0; i<[paragraphArray count]; i++)
{
Text = [Text stringByAppendingFormat:@"%@\n", [paragraphArray objectAtIndex:i]];
}
[Shared sharedInstance].messages = Text;
}
然后在另一个类中,其中,我想要的文本显示的代码,在viewDidLoad中方法,
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog([Shared sharedInstance].messages);
UITextView *myUITextView = [[UITextView alloc] initWithFrame:CGRectMake(0,30,310,450)];
myUITextView.text = [Shared sharedInstance].messages;
myUITextView.textAlignment = NSTextAlignmentCenter;
myUITextView.textColor = [UIColor blackColor];
myUITextView.font = [UIFont fontWithName:@"GurbaniLipiLight" size:24];
[myUITextView setBackgroundColor:[UIColor clearColor]];
myUITextView.editable = NO;
myUITextView.scrollEnabled = YES;
[ScrollerView addSubview:myUITextView];
}
确定的NSLog显示不出来的权利,但同样没有在TextView的文本,它做的NSLog做同样的事情。
代码看起来像是在显示错误的东西?如果你将它移动到'viewDidAppear'而不是'viewDidLoad',它仍然是错误的吗? – 2012-07-31 22:22:34
你可以包含更多的“消费”代码吗?特别是来自“其他类”的代码,但理想情况下是一个充分的用例,表明不良行为。 – 2012-07-31 22:22:46
单例看起来不错,请您分享viewDidLoad和代码的第二部分,何时再调试打印值?另外,第二次在哪里?在按钮处理程序? – 2012-07-31 22:22:48