IBOutlet не распознается Интерфейсным Разработчиком при подготовке компиляции в объявлении Интерфейса - PullRequest
0 голосов
/ 22 февраля 2011

Если я добавлю этот флаг компиляции с условием в мой заголовочный файл, который является владельцем xib-файла, xib-файл не сможет прочитать IBOutlet и отобразить как отсутствующий. И дает предупреждения.

Во время выполнения работает нормально. Кто-нибудь испытывал такую ​​же проблему?

/* MFMessageComposeViewControllerDelegate is available in iOS 4.0 and later. */



#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000

   @interface SendMoneyResponseVC : UITableViewController 
    <UINavigationControllerDelegate, MFMessageComposeViewControllerDelegate,    
    MFMailComposeViewControllerDelegate, UIActionSheetDelegate> 

   #else

   @interface SendMoneyResponseVC : UITableViewController 
    <UINavigationControllerDelegate, 
    MFMailComposeViewControllerDelegate, UIActionSheetDelegate> 

    #endif 

{
    IBOutlet UITableView *sendMoneyTableVC;

    IBOutlet UITableViewCell *refNumRemittanceCell;
    IBOutlet UILabel *refNumLabel, *refNumValueLabel, *refNumInfoLabel;

    IBOutlet UITableViewCell *refNumDomesticCell;
    IBOutlet UILabel *domesticInfoLabel, *feeAndReferenceLabel;

    IBOutlet UITableViewCell *shareRefNumCell;
    IBOutlet UIButton *shareRefNumButton;

    NSString *referenceNumber, *recipient, *currency, *mtoName;
    float amount, fee;
    int sendMoneyType;

    UIAlertView *smsAlertView;
}

@property (nonatomic, retain) UITableView *sendMoneyTableVC;

@property (nonatomic, retain) UITableViewCell *refNumRemittanceCell;
@property (nonatomic, retain) UILabel *refNumLabel, *refNumValueLabel, *refNumInfoLabel;

@property (nonatomic, retain) UITableViewCell *refNumDomesticCell;
@property (nonatomic, retain) UILabel *domesticInfoLabel, *feeAndReferenceLabel;

@property (nonatomic, retain) UITableViewCell *shareRefNumCell;
@property (nonatomic, retain) UIButton *shareRefNumButton;

@property (nonatomic, retain) NSString *referenceNumber, *recipient, *currency, *mtoName;
@property float amount, fee;
@property int sendMoneyType;

- (IBAction) didPressShareButton;

@end

Ответы [ 2 ]

1 голос
/ 13 июля 2012

Вы пытались реструктурировать свой код способом, который эквивалентен компилятору, но с меньшей вероятностью запутает Interface Builder?Примерно так:

@interface SendMoneyResponseVC : UITableViewController 
    <UINavigationControllerDelegate, 
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
    MFMessageComposeViewControllerDelegate,    
#endif 
    MFMailComposeViewControllerDelegate, 
    UIActionSheetDelegate> 
{ ... }
@end

Таким образом, будет только одна пара @interface / @end.

0 голосов
/ 22 февраля 2011

в чем причина этого? Если вы не хотите скомпилировать устаревший SDK, вам следует избавиться от этого.

Interface Builder не обрабатывает ваши файлы заранее, поэтому он увидит два @interfaces и один @ end.
И конструктор интерфейса не может разобрать что-то вроде этого.

...