ここにシングルトンがあります。ヘッダーファイルは次のとおりです。
#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があるので、ボタンをクリックして次のビューに移動すると、文字列の値が出力されますが、2回目しか機能しません。変数がdogに設定されている場合、最初は何も出力しません。次に、ビューを閉じて再試行すると、dogが出力されます。ただし、変数をcatに変更すると、dogが出力され、次の試行でcatが出力されます。常に遅れをとるのではなく、すぐに更新してほしい。
編集:他のクラスのコードは次のとおりですこの特定のセクションは、メソッドのViewControllerクラスからのものです
- (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が正しく表示されないことは確かですが、テキストビューのテキストも表示されません。NSLogと同じことを行います。