由於某種原因,屬性的自定義設置器永遠不會被調用。所以它在運行時總是通過零。視圖控制器中視圖初始化之前調用的方法 - iPhone iOS 5 SDK
我有一個視圖控制器,創建一個NSValue對象的NSArray並將其作爲屬性傳遞給視圖。但是,該屬性總是通過零,即使我使用調試器驗證視圖控制器中的NSArray是否正常。
視圖控制器 @interface GraphingViewController() @屬性(非原子,弱)IBOutlet中GraphingView * graphingView; @end
- (void) determinePointsOnGraph
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSMutableArray *pointsForGraph = [[NSMutableArray alloc] init];
float startingPoint = -250;
for (int i = 0; i < 500; i++) {
float x = startingPoint;
startingPoint++;
[dict setValue:[NSNumber numberWithFloat:x] forKey:[NSString stringWithString:@"x"]];
float y = [CalculatorBrain runProgram:[self graph] usingVariableValues:dict];
[pointsForGraph addObject:[NSValue valueWithCGPoint:CGPointMake(x,y)]];
}
//This calls the pointer to the view, and the setter for the view's property
[self.graphingView setPointsOnGraph:pointsForGraph];
}
查看
@synthesize pointsOnGraph = _pointsOnGraph;
- (void)setPointsOnGraph:(NSArray *)pointsOnGraph
{
//Custom setter for property, never gets called if a break point is put here
_pointsOnGraph = pointsOnGraph;
[self setNeedsDisplay];
}
- (void)drawLine:(NSArray *)pointsOfLine inContext:(CGContextRef)context
{
CGPoint pointsOfLineAsCGPoints[[pointsOfLine count]];
for (int i = 0; i < sizeof(pointsOfLineAsCGPoints); i++) {
pointsOfLineAsCGPoints[i] = [[pointsOfLine objectAtIndex:i] CGPointValue];
}
CGContextAddLines(context, pointsOfLineAsCGPoints, sizeof(pointsOfLine));
CGContextClosePath(context);
CGContextStrokePath(context);
}
的方法的drawLine由所謂的drawRect,並通過了pointsOnGraph財產pointsOfLine。即使我在drawRect中放置了一個斷點並查看了pointsOnGraph屬性,它在視圖中始終爲零。但是,當視圖控制器將其傳遞給視圖時,它將包含數百個對象。
我只是不明白爲什麼該屬性總是爲零,如果我在setter中放置一個斷點,它永遠不會被調用。
更新 我已經驗證faceView參考視圖爲零當它第一次調用,但IBOutlet中表現爲正常掛鉤,並認爲最終得到顯示。看來,self.graphingView IBOutlet中被初始化
以下是我從
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"Graphing"]) {
[segue.destinationViewController setGraph:[[self.brain program] mutableCopy]];
[segue.destinationViewController determinePointsOnGraph];
}
}
解決方案 調用determinePointsOnGraph方法Segue公司的視圖控制器前視圖控制器方法獲取調用在viewDidLoad委託中,而不是在準備segue。這確保視圖已經創建。我還有另一個問題,這是因爲在視圖控制器中訪問數據的視圖出口沒有在視圖設置器中初始化。
非常感謝,花了一點時間才得以實現,但問題是我不理解代表。感謝您的幫助,並指引我朝着正確的方向前進。 – KopfaufAchseln 2012-02-25 04:55:34