每次我运行代码时,它都会在无限循环中运行myProperty
并一遍又一遍地调用该函数。我应该怎么做才能克服这个..我在 viewController 的 viewDidLoad 函数中编写了以下代码。
[self.model addObserver:self forKeyPath:@"myProperty" options:NSKeyValueObservingOptionNew context:NULL];
[self.model myProperty];
这里我有一个Model
类,它有一个名为的属性myProperty
和一个方法或一个 getter myProperty
。我myProperty
用来连接到数据库,收集列的所有值并将其存储在myProperty
. 我检查了方法..没有 KVOmyProperty
它做得很好。但是当我添加这个 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;
}
先感谢您