コードを実行するたびに、無限ループで実行され、関数myProperty
を何度も呼び出します。これを克服するにはどうすればいいですか..viewControllerのviewDidLoad関数に次のコードを書きました。
[self.model addObserver:self forKeyPath:@"myProperty" options:NSKeyValueObservingOptionNew context:NULL];
[self.model myProperty];
ここにModel
クラスがあり、名前付きのプロパティmyProperty
とメソッドまたはゲッターがあります。データベースに接続して、列のすべての値を収集し、に保存するためにmyProperty
使用しています。メソッドを確認しました..KVOなしで問題なく動作しています。しかし、この KVO を追加すると、これは無限ループに入ります。myProperty
myProperty
myProperty
再び私も使用しました
- (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;
}
前もって感謝します