2010-11-12 64 views
2

我想在我的應用程序中管理子視圖。我搜索了網頁,最近遇到了NSPredicate課程。我查了一些例子,但是我在這裏的某處停留了。如果有人能幫助或糾正我,我會很高興。我有一個UIView類的子視圖數組。就像你知道的那樣,我可以用這個命令獲得這個數組:「self.subviews」。我想子視圖其X位置的數組是greatr然後2100,並且代碼如下所示:NSPredicate查詢UIView子視圖

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"frame.origin.x >= 2100.0"]; 
NSLog(@"%d", [[self.subviews filteredArrayUsingPredicate:predicate] count]); 

,但它給了我這樣的錯誤:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSConcreteValue 0xef2a2f0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key origin.' 

ü可以給一隻手?

回答

5

這是行不通的,因爲framestruct而不是對象,並且origin是此結構的成員。您不能通過使用鍵值編碼來訪問結構成員。

您可以嘗試在UIView上添加一個類別,將-(CGFloat)x方法添加到UIView中,該方法返回視圖的x位置。謂詞格式將只是@"x >= 2100"

+0

我打算建議'enumerateObjectsUsingBlock:',但我認爲類別方法是一個很好的解決方案。 – 2010-11-12 14:20:02

+0

就像一個魅力工作,謝謝 – Sarpkaya 2010-11-12 14:33:07

0

另一種替代方法將是使用一個UIView類別添加-(CGFloat) frameOriginX方法,該方法簡單地返回[self frame].origin.x,然後使用frameOriginX作爲謂詞的keyPath。