您的位置:首页 > 产品设计 > UI/UE

UI:文件操作、通知中心

2015-10-01 18:00 429 查看
对文件的操作:

————————————————————————————————————————————————————————(.h文件)

#import <Foundation/Foundation.h>

@interface Listener : NSObject

//想听广播
-(void)wantToListern;
@end

————————————————————————————————————————————————————————(.m文件)

#import "Listener.h"

@implementation Listener
//想听广播
-(void)wantToListern{
//1.要注册
//param1  ,param2 这两个参数是只要有BJBroadcoast 广播就调用 [self recvBcast:]方法。
//这里 name 的属性值要与前面的 通知中心的第三个参数通知内容(字典中的数据一致)
[[NSNotificationCenter  defaultCenter] addObserver:self selector:@selector(recvBcast:) name:@"BJBroadcoast" object:nil];
//2.要真正的接受广播数据
}

-(void)recvBcast:(NSNotification *)notify{
//notify 就是具体的广播消息
NSLog(@"notify  is %@",notify.name);
}
@end


View Code Listener文件

通知在UI中对于子线程和重线程的解决方案:

当用NSNotification,在回调函数里面对tableview进行reloadData时,并不能更新UI,而且还会导致以后都更新不了。后来查了一些资料才发现,postNotification之后调用回调函数,相当于开了一个子线程,而子线程中是不能更新UI的。所以要想在notification的回调里面更新UI,必须用

dispatch_async(dispath_get_main_queue(),^{

[tableview reloadData];

}];

(总结)代码中的全局变量的使用, 定时器循环调用一个方法,通知中心的单例对象的创建

NSNotification 里面有三个参数,点开查看:

@interface NSNotification : NSObject <NSCopying, NSCoding>

@property (readonly, copy) NSString *name;

@property (readonly, retain) id object;

@property (readonly, copy) NSDictionary *userInfo;

上面的三个参数于我们 消息中心 NSNotificationCenter 的消息发送对象里面的三个参数对应,这就是为啥监听者类在接受消息的时候,要进行注册的缘故。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: