我正在尝试将我的GUI和逻辑分开...例如,我有一个计算内容的类(calc.h / calc.m)。我有我的GUI(viewController.h / viewController.m)...现在我想从另一个类更新GUI的一个元素...我已经尝试使用Singleton,如下所示:
calc.m:
viewController *con = [viewController sharedInstance];
con.download.text = @"It Works";
viewController.m:
+ (id)sharedInstance {
static id sharedInstance;
@synchronized(self) {
if (!sharedInstance)
sharedInstance = [[viewController alloc] init];
return sharedInstance;
}
}
但它不起作用......
更新:
在我的ViewController中:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(receiveNotification:)
name:@"UpdateDownloadLabel"
object:nil];
- (void) receiveNotification:(NSNotification *) notification
{
NSDictionary* userInfo = notification.userInfo;
if ([[notification name] isEqualToString:@"Update"])
{
download.text = [userInfo valueForKey:@"Test"];
}
}
在我的其他课程中,我发布了这样的通知:
[[NSNotificationCenter defaultCenter]
postNotificationName:@"UpdateDownloadLabel"
object:nil userInfo:info];
但它不起作用......
答案 0 :(得分:6)
这不是单身人士的正确用法。如果您需要从模型中通知您的UI,您可以选择以下选项:
- delegation
- Local Notification
- KVO
一般规则是让您的逻辑与您的演示文稿分离,因此您的calc
类不应该真正知道名为download
的标签存在。
答案 1 :(得分:0)
示例:如何使用通知。
extern NSString * const ClassADidViewNotification;
NSString * const ClassADidViewNotification = @“ClassADidViewNotification”;
Register for notification in classA.m :-
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserverForName: XXFooDidBarNotification
object:nil
queue:nil
usingBlock:^(NSNotification *notification)
{
NSLog(@"notification.object: %@", notification.object);
}
];
发布通知: -
ClassB.m
[[NSNotificationCenter defaultCenter] postNotificationName: ClassADidViewNotification object:nil];