Запрос на членство в чем-то не структура или союз - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь сделать сохранение / загрузку в моем AppDelegate, для чего мне нужны спрайты врагов и героев. Я использую cocos2d. Вот метод, который получает предупреждение.

-(void)applicationDidFinishLaunchingWithOptions:(UIApplication *)application {
 NSMutableArray *loadedMoles = [DataBase loadDocs];
 NSMutableArray *loadedBunnies = [DataBase loadDocs];
 UINavigationController *navigationController;
 viewController = (RootViewController *) [navigationController.viewControllers objectAtIndex:0];
 viewController.mole = loadedMoles; //error
 viewController.bunny = loadedBunnies; //error
}

Несмотря на то, что это AppDelegate, я импортировал оба класса и все еще получаю ошибки.

Ответы [ 3 ]

0 голосов
/ 17 января 2011

По указанной вами ссылке используется класс RootViewController, и вы пытаетесь использовать UINavigationController, который просто не имеет таких свойств, как кроты и кролики, как сказал @Jonathan

0 голосов
/ 01 октября 2011

У меня также возникла ошибка «Запрос на« опции »члена в чем-то, не являющемся структурой или объединением».

@interface Dialog :  NSManagedObject {}
@property (nonatomic, retain) NSSet* options;

@implementation Dialog
@dynamic options;

Там, где я просто забыл импортировать «Dialog.h» в класс, который пытался получить доступ к этому экземпляру.

0 голосов
/ 17 января 2011

Соответствующая часть комментариев

Jonathan

Учитывая, что проблема не только в . против ->, другой основной вариант заключается в том, что ваш viewController содержит любые родинки или кролики.

Джо

Я использую учебник по http://www.raywenderlich.com/1914/how-to-save-your-app-data-with-nscoding-and-nsfilemanager. (там есть код для загрузки.)

Выполнение:

viewController->mole = loadedMoles;

говорит

'struct RootViewController' has no member named 'mole'

Как добавить его в viewController?

Хотя в уроке они используют

NSMutableArray *loadedBugs = [ScaryBugDatabase loadScaryBugDocs];
RootViewController *rootController = (RootViewController *)
                       [navigationController.viewControllers objectAtIndex:0];
rootController.bugs = loadedBugs; 

Jonathan

В загруженном коде (ScaryBugs3/Classes/rootViewController.h) демо имеет:

@class EditBugViewController;
@interface RootViewController : UITableViewController {
    NSMutableArray *_bugs;
    EditBugViewController *_editBugViewController;
}

@property (retain) NSMutableArray *bugs;
@property (retain) EditBugViewController *editBugViewController;

@end

Правильно ли определены в вашем эквиваленте слова "кроль" и "зайчик"? Если это так, я затрудняюсь вам помочь.

Джо

Я никогда не скачивал исходный код, поэтому ничего этого не видел. Спасибо, мне было интересно, может ли он иметь ошибки в виде массива вместо спрайта ошибок.

Не очень важная часть ответа

В обычном C или C ++ с GCC сообщение об ошибке обычно появляется, когда:

  • Вы используете structptr->member, и вы должны использовать structvar.member или
  • Вы используете structvar.member, и вы должны использовать structptr->member.

Objective-C достаточно близок к C на данном этапе, так что вам, вероятно, потребуется пересмотреть использование . против -> обозначений, я полагаю.

Теперь, когда ваш код разборчив, строки с ошибкой:

viewController.mole = loadedMoles; //error
viewController.bunny = loadedBunnies; //error

Вам, вероятно, нужно использовать viewController->mole и viewController->bunny вместо этого? (Я не уверен в этом, но в той степени, в которой Objective-C является надмножеством C, это было бы необходимым изменением. Однако, возможно, что Objective-C устраняет необходимость различать . и ->.)

...