Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用setter将通知作为值更改发布?_Ios_Nsnotificationcenter - Fatal编程技术网

Ios 使用setter将通知作为值更改发布?

Ios 使用setter将通知作为值更改发布?,ios,nsnotificationcenter,Ios,Nsnotificationcenter,////////////////// - (void) setNeededValue:(valueType)newValue; { neededValue = newValue; if( neededValue > threshold ) { [[NSNotificationCenter defaultCenter] postNotificationName: @"setNeededValue" object: self]; } } 是否

//////////////////

- (void) setNeededValue:(valueType)newValue;
{
    neededValue = newValue;

    if( neededValue > threshold )
    {
        [[NSNotificationCenter defaultCenter] postNotificationName: @"setNeededValue" object: self];
    }
}
是否调用SetNeedValue,调用通知是否存在问题?当它达到阈值条件时,是否调用函数callfunction…:(这有点新吗?请帮帮我


提前感谢!:)

问题可能是您将自己设置为观察员,以便在错误的位置发出通知

您将成为callfunction内部通知的观察者(当达到阈值时将调用该函数)

在实例化对象或视图时,只应添加一次观察者。当它被移除时被移除

因此,将addObserver移动到init(或者在viewDidLoad方法中的视图控制器内部)

正如Christian所指出的,这不应该是一个问题

我将替换: [[NSNotificationCenter defaultCenter]postNotificationName:@“SetNeedValue”对象:self]; 具有 [[NSNotificationCenter defaultCenter]postNotificationName:@“SetNeedValue”对象:nil]; 然后,它应该可以工作,因为通知中心会检查从postNotification传递的对象,并查看观察者,如果存在匹配项,它将被调用,如果没有,它将不会被调用。
在您的案例中,您使用object
self
发布通知,但在addObserver中,您的object
nil

有什么问题?一个问题是您的addObserver:方法正在触发setNeededValue,但您正在实现SetNeedValue:(0个参数与一个参数)。即使这样,只有一个参数的通知也会传入一个NSNotification对象,所以不确定您要做什么。不知道!当它运行时-(void)callfunction应该得到call并打印100,但它不工作!:(如果您的callfunction在达到阈值之前未被调用,则表示您未能注册任何通知,并且您正在发布未注册的通知……使用对象发布通知并让观察者使用nil是完全正确的。使用nil仅意味着“我正在侦听任何发布通知的对象,而不是一个特定的对象”重新检查答案,在viewDidLoad或init中添加addObserver代码。当我在viewDidLoad中调用它时,程序停止在[[NSNotificationCenter defaultCenter]postNotificationName:@“SetNeedValue”对象:nil];错误:程序收到信号:”EXC_BAD_ACCESS“将addObserver方法添加到viewDidLoad而不是postNotification。因此将:[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(SetNeedValue)name:@“SetNeedValue”对象:nil];添加到viewDidLoad
-(void)callfunction{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setNeededValue) name:@"setNeededValue" object:nil];

NSLog(@"sam: %d,100);
}