вопрос-c / iphone SDK новичок вопрос - PullRequest
0 голосов
/ 18 мая 2011

В настоящее время я создаю базовое приложение для изучения Objective-C и iPhone SDK.Я создаю NSObject с геттерами и сеттерами, чтобы понять, как это работает.Я успешно добавил свойство и методы получения и установки в свой основной контроллер, в настоящее время я пытаюсь создать отдельный класс, в котором я могу создать новый экземпляр внутри моего контроллера, но он падает, когда я пытаюсь использовать установщик.

Заранее спасибо за ваше время, извините, если этот вопрос настолько глуп, насколько я в этом уверен.

Вот заголовок для моего класса

QuizQuestion.h

#import <Foundation/Foundation.h>


@interface QuizQuestion : NSObject {
    NSString *question;
}

@property (retain) NSString* question;


@end

QuizQuestion.m

#import "QuizQuestion.h"

@implementation QuizQuestion

@synthesize question;



- (void) dealloc
{
    [question release];

    [super dealloc];
}



@end

А вот мой код контроллера (я его вырезал)

@implementation Quiz2ViewController
@class QuizQuestion; // Is this correct?
- (void)viewDidLoad {
    QuizQuestion *aQuestion;
      //gets here fine, but crashes (the app closes) when I set question.
      [aQuestion setQuestion:@"hello world"];
      [super viewDidLoad];
} 
@end

А также @class, который я пробовал импортировать"QuizQuestion.h", и я получаю ту же проблему.

Ответы [ 4 ]

2 голосов
/ 18 мая 2011

Вы на самом деле не выделяете экземпляр класса QuizQuestion - ваша переменная aQuestion не указывает ни на что конкретное, поэтому попытка отправить ей сообщение, например -setQuestion:, отправляет это сообщение .. ну, нет никакого указания, где, и отправка сообщений, которые не предназначены для них, является верным способом сбить ваше приложение. Что вам нужно сделать, это:

QuizQuestion *aQuestion = [[QuizQuestion alloc] init];
[aQuestion setQuestion:@"hello world"];

Вам также необходимо в какой-то момент позвонить [aQuestion release], иначе вы потеряете память, связанную с ним.

2 голосов
/ 18 мая 2011

Вам нужно выделить место и инициализировать QuizQuestion.

QuizQuestion *aQuestion = [[QuizQuestion alloc] init];

, прежде чем задавать вопрос.

0 голосов
/ 18 мая 2011
QuizQuestion *aQuestion = [[QuizQuestion alloc] init];
[aQuestion setQuestion:@"hello world"];
[aQuestion release];
0 голосов
/ 18 мая 2011

Я думаю, вам нужно прочитать некоторые документы, прежде чем пытаться больше писать код.У Apple есть несколько хороших руководств по программированию.Проблема, с которой вы столкнулись, решается в этом разделе:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocAllocInit.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...