每次我运行它在无限循环中运行的代码并一遍又一遍地调用函数myProperty
。我应该做些什么来克服这一点..我写了下面的代码在viewController的viewDidLoad函数。Key Value Observing中的无限循环
[self.model addObserver:self forKeyPath:@"myProperty" options:NSKeyValueObservingOptionNew context:NULL];
[self.model myProperty];
在这里,我有一个Model
类,它有一个名为myProperty
属性和方法,或。我是用myProperty
连接到一个数据库中的一个getter myProperty
收集的所有值一列并将其存储在myProperty
中。我检查了myProperty
方法..它做得很好没有KVO。但是当我添加这个KVO时,这会进入无限循环。
再次我也用
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary *)change context:(void *)context {
if([keyPath isEqualToString:@"myProperty"])
NSLog(@"called");
}
和我myProperty
方法
- (void) myProperty
{
NSString *file = [[NSBundle mainBundle] pathForResource:@"MyDatabase" ofType:@"db"];
sqlite3 *database = NULL;
sqlite3_stmt *stmt;
NSMutableArray *availableNames=[NSMutableArray array];
if (sqlite3_open([file UTF8String], &database) == SQLITE_OK)
{
NSString *query=[NSString stringWithFormat:@"select * from Names"];
if(sqlite3_prepare_v2(database, [query UTF8String], -1, &stmt, NULL)==SQLITE_OK)
{
while (sqlite3_step(stmt)==SQLITE_ROW) {
[availableNames addObject:[[NSString alloc]initWithUTF8String:(char *)sqlite3_column_text(stmt,1)]];
}
sqlite3_finalize(stmt);
}
}
sqlite3_close(database);
self.myProperty = availableNames;
}
预先感谢您
什么是self.model数据类型???是NSArray?有更详细的代码吗?你能发布无限循环代码吗? – 2012-08-04 15:44:42
self.model是我的'Model'类的一个对象,也是viewController的一个属性。好吧,从来没有,我正在编辑这个问题。 – 2012-08-04 15:48:47
当你发布最详细的信息时,你可以得到一个很好的答案。 – 2012-08-04 15:52:09