每次我運行它在無限循環中運行的代碼並一遍又一遍地調用函數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