2012-09-04 29 views
1

我的應用程序在幾個不同的視圖中使用UIStepper控件。我發佈了一個應用程序的小更新,根本不應該影響這些視圖,並且我開始得到報告,現在應用程序中的所有UISteppers都被禁用了。一位用戶發送了一個屏幕快照,並且步進控制器顯示爲其啓用的屬性設置爲「否」。但是,在我的代碼中沒有任何地方可以設置該屬性,而默認值爲YES。我在應用程序中搜索了「啓用」一詞的實例,以確保我不會意外地禁用它,而我不是。我的iOS應用程序中的所有UISteppers已被禁用

我想也許是enabled屬性的iOS版本之間改變了默認值,但誰報告這個用戶運行iOS 5.1.1,同我的開發設備。我只是開始聽說這個應用程序更新的問題。

除了設置啓用的屬性,我發現,如果最小值和最大值設置爲同一值的步進電機將被禁用。我很確定這不會發生在我的應用程序中。這些值是硬編碼的,並傳遞給設置方法,並且自從許多應用程序版本以前,我沒有更改過這些代碼。

你知道爲什麼會發生這種情況嗎?我自己無法再現問題,並且僅影響某些用戶,因此很難排除故障。

這裏是我創建的UISteppers,對於它的價值代碼:

- (UIStepper *)makeStepperInput:(float)currentValue minValue:(float)minValue maxValue:(float)maxValue increment:(float)increment { 
    int stepperWidth = 94; 
    int stepperHeight = 27; 
    CGRect stepperFrame = CGRectMake(0, 0, stepperWidth, stepperHeight); 

    UIStepper *stepperInput = [[[UIStepper alloc] initWithFrame:stepperFrame] autorelease]; 
    stepperInput.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; 

    [stepperInput setValue:currentValue]; 
    [stepperInput setMinimumValue:minValue]; 
    [stepperInput setMaximumValue:maxValue]; 
    [stepperInput setStepValue:stepValue]; 
    [stepperInput setContinuous:NO]; 

    NSLog(@"making stepper with values %f, %f, %f, %f (%i)", currentValue, minValue, maxValue, stepValue, stepperInput.enabled); 

    [stepperInput addTarget:self action:@selector(onChange:) forControlEvents:UIControlEventValueChanged]; 

    return stepperInput; 
} 

更新:我有誰願意安裝與上述的NSLog線調試版本的用戶。他向我發送了控制檯輸出,它顯示了步進器的最小值和最大值是正確的(在一種情況下爲1和20),並且啓用的屬性爲YES。不幸的是,消除我的兩個理論關於什麼可以在這裏發生的事情......

回答

1

好吧,這裏發生了什麼事。上面貼出的方法是我真正方法的簡化版本,它爲iOS 5以前的設備提供了一些分支。爲了幫助支持iOS 5之前的支持,我實際上將stepperInput聲明爲UIControl,然後在不支持UIStepper的iOS版本上返回不同的東西。

現在有趣的部分。我把項目放回原處,開始查看我的構建設置,並記住在我上次發佈之前,Xcode給了我關於我的構建設置過期的警報消息之一。我點擊了按鈕以允許Xcode進行所有建議的更改。這一次,我每次執行一次更改,並在每次更改後測試我的應用程序。

中的第一個推薦的變化是「升級編譯器配置LVVM」。 (「編譯器配置設置爲'com.apple.compilers.llvmgcc42',這將升級到'Apple LLVM編譯器4.0',這是iOS目標的推薦設置。」)一旦我做出更改,問題出現在我的測試設備上。所以看起來,舊的編譯器允許我在聲明爲UIControl的對象上設置UIStepper屬性,而新的編譯器沒有。事實上,當我改變上面的NSLog行來輸出步進器的實際值而不是傳入方法的值時,它們全部返回0.其最小值和最大值都設置爲0是步進器看起來是什麼禁用。

我不認爲這會影響所有用戶,因爲我無法重現它,但我正在測試舊版本的設置,而不是用於版本的版本設置。所以現在我想這可能會影響所有用戶,只有一些用戶已經注意到了它。

無論如何,解決方案是重新組織我的代碼,所以我可以聲明UIStepper是一個真正的UIStepper,因爲較新的編譯器不允許我之前做的那種欺騙。

相關問題