7

我对 Xcode 有疑问:

目前我正在开发适用于 iOS SDK 6.1 的应用程序。前几天我正在实现一些方法并尝试编译该项目。然后奇怪的事情发生了:

编译失败,我在两个文件中遇到了一些错误(见下图),这些错误与我使用的方法无关。

我在我的代码中搜索错误,但找不到任何错误。
然后我关闭了项目并再次打开它:他们还在这里。
然后我关闭了项目和 Xcode 并重新打开它们:它们还在这里。
然后我创建了一个新项目并复制了所有代码:问题又出现了。

现在我被困住了,不知道该怎么做。我错过了代码中的某些内容吗?

请帮我!

---

编辑1:

以下是一些代码片段,在我遵循 Martin R 的建议后应该会显示我的代码:

//  PlayingCardDeck.h  
@class PlayingCard;  
@interface PlayingCardDeck : NSObject  
- (void) addCard: (PlayingCard *) card atTop: (BOOL) atTop;  
- (PlayingCard *) drawRandomCard;  
- (BOOL) containsCard: (PlayingCard *) card;  
- (BOOL) isCardUsed: (PlayingCard *) card;  
- (void) drawSpecificCard: (PlayingCard *) card;  
- (void) reset;  
@end  

//  PlayingCardDeck.m  
#import "PlayingCardDeck.h"  
@interface PlayingCardDeck()  

//  PlayingCard.h  
#import <Foundation/Foundation.h>  
#import "RobinsConstants.h"  
#import "PlayingCardDeck.h"  
//@class PlayingCardDeck;  
@interface PlayingCard :  NSObject  
+ (NSArray*) suitStrings;  
+ (NSArray*) rankStrings;  
+ (NSUInteger) maxRank;  
- (id)initCardWithRank: (NSUInteger) r andSuit: (NSString*) s;  
- (NSString*) description;  
- (NSUInteger) pokerEvalRankWithDeck: (PlayingCardDeck *) deck;  
- (NSAttributedString *) attributedContents;  
- (BOOL) isEqual:(PlayingCard*)object;  
@property (strong, nonatomic) NSString *contents;  
@property (nonatomic, getter = isUsed) BOOL used;  
@property (nonatomic, readonly) NSInteger rank;
@property (nonatomic, readonly, strong) NSString * suit;  
@end

//  PlayingCard.m  
#import "PlayingCard.h"  
@interface  PlayingCard()

4

3 回答 3

20

这看起来像一个典型的“导入周期”:

 // In PlayingCardDeck.h:
 @import "PlayingCard.h"

 // In PlayingCard.h:
 @import "PlayingCardDeck.h"

@import将其中一个语句替换为@class应该可以解决问题,例如

 // In PlayingCardDeck.h:
 @class PlayingCard; // instead of @import "PlayingCard.h"

在实现文件中,您必须导入完整的接口:

 // In PlayingCardDeck.m:
 #import "PlayingCardDeck.h"  
 #import "PlayingCard.h"    // <-- add this one
于 2013-09-07T13:41:57.263 回答
0

PlayingCard.h 中有问题。此错误导致编译器不知道“PlayingCard *”是什么。您可以显示 PlayingCard.h 中的代码吗?

于 2013-09-07T13:29:08.750 回答
0

确保将 PlayingCard.m 添加到您的应用程序目标!我认为不是(单击 .m 文件并在右侧窗格的检查器窗口中检查您的应用程序目标)

于 2013-09-07T13:42:00.910 回答