Проблема с разбором строк - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь поставить строку диалога на каждой серии изображений.Чтобы сопоставить строку диалога с правильным изображением, я заканчиваю каждую строку косой чертой (/), за которой следует число, чтобы идентифицировать соответствующее изображение.Затем я анализирую каждую строку, чтобы получить диалоговое окно, а затем номер ссылки для изображения.Все работает нормально, за исключением того, что, когда я помещаю строку диалога в textView, я получаю всю строку в textView вместо части диалога.Что сбивает с толку, так это то, что консоль, кажется, указывает, что синтаксический анализ строки диалога был выполнен правильно.

Вот подробности моей кодировки:

@interface DialogSequence_1ViewController : UIViewController {

        IBOutlet UIImageView *theImage;
        IBOutlet UITextView *fullDialog;
        IBOutlet UITextView *selectedDialog;
        IBOutlet UIButton *test_1;
        IBOutlet UIButton *test_2;
        IBOutlet UIButton *test_3;
        NSArray *arrayLines;
        IBOutlet UISlider *readingSpeed;
        NSArray *cartoonViews;
        NSMutableString *dialog;
        NSMutableArray *dialogLineSections;
        int lNum;


    }
    @property (retain,nonatomic) UITextView *fullDialog;
    @property (retain,nonatomic) UITextView *selectedDialog;
    @property (retain,nonatomic) UIButton *test_1;
    @property (retain,nonatomic) UIButton *test_2;
    @property (retain,nonatomic) UIButton *test_3;
    @property (retain,nonatomic) NSArray *arrayLines;
    @property (retain,nonatomic) NSMutableString *dialog;
    @property (retain,nonatomic) NSMutableArray *dialogLineSections;
    @property (retain,nonatomic) UIImageView *theImage;
    @property (retain,nonatomic) UISlider *readingSpeed;

    -(IBAction)start:(id)sender;
    -(IBAction)counter:(id)sender;
    -(IBAction)runNextLine:(id)sender;

@end


@implementation DialogSequence_1ViewController
@synthesize fullDialog;
@synthesize selectedDialog;
@synthesize test_1;
@synthesize test_2;
@synthesize test_3;
@synthesize arrayLines;
@synthesize dialog;
@synthesize theImage;
@synthesize readingSpeed;
@synthesize dialogLineSections;


-(IBAction)runNextLine:(id)sender{

    //Get dialog line to display from the arrayLines array
    NSMutableString *dialogLineDetails;
    dialogLineDetails =[arrayLines objectAtIndex:lNum];
    NSLog(@"dialogLineDetails = %@",dialogLineDetails);
    //Parse the dialog line
    dialogLineSections = [dialogLineDetails componentsSeparatedByString: @"/"];
    selectedDialog.text =[dialogLineSections objectAtIndex: 0];
    NSLog(@"Dialog part of line = %@",[dialogLineSections objectAtIndex: 0]);
    NSMutableString *imageBit;
    imageBit = [dialogLineSections objectAtIndex: 1];
    NSLog(@"Image code = %@",imageBit);
    //Select right image
    int im = [imageBit intValue];
    NSLog(@"imageChoiceInteger = %i",im);
//------more code
}

Я получаю предупреждениена линии:

dialogLineSections = [dialogLineDetails componentsSeparatedByString: @"/"];

предупреждение: несовместимые типы Objective C присваивают 'struct NSArray *', ожидаемый 'struct NSMutableArray *'

Я не совсем понимаю, и пыталсяизменить типы, но безрезультатно.

Буду признателен за некоторые советы здесь.

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

Символ косой черты является escape-символом, поэтому его не следует использовать в качестве разделителя.Это может привести к случайным ошибкам при обработке строк.Выберите что-то еще, предпочтительно произвольную строку, такую ​​как !123!

. Вы получаете предупреждение, потому что componentsSeparatedByString: возвращает NSArray вместо NSMutableArray, и вы назначаете статический массив указателю изменяемого массива.Вместо этого используйте:

self.dialogSections=[NSMutableArray arrayWithArray:[dialogLineDetails componentsSeparatedByString: @"/"]];
0 голосов
/ 10 марта 2011

Предупреждение говорит вам точно, в чем проблема. -componentsSeparatedByString: возвращает неизменный экземпляр NSArray, но вы присваиваете этот результат переменной типа NSMutableArray. Поэтому вам нужно либо изменить переменную на NSArray (в этом случае вы не можете ее изменить), либо сделать изменяемую копию массива компонентов (через -mutableCopy, которую вы должны сбалансировать с -release или -autorelease, чтобы избежать утечек памяти.)

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