Отделить статическую NSString для загрузки в массив

#objective-c #ios #ipad #static #nsstring

#objective-c #iOS #iPad #статический #nsstring

Вопрос:

Итак, следуя приведенному здесь образцу DocInteraction от Apple, я поместил a static NSString для определения некоторых предварительно загруженных документов. Теперь мне нужно загрузить их в NSArray в viewDidLoad методе. Если я помещу это в for() оператор, он скажет «результат выражения не используется», и я знаю, что мог бы решить это с помощью documents[indexPath.row] , но это метод viewDidLoad . Итак, как мне получить статическую NSString для загрузки в NSArray?

КОД (РЕДАКТИРОВАТЬ):

 //Before @implementation

static NSString* documents[] =
{   @"Musette.pdf",
    @"Minore.pdf",
    @"Cantata.pdf",
    @"Finalé.pdf"
};
//In viewDidLoad

    if ( _icons == nil )
{        

    _icons = [[NSMutableArray alloc] init];
    UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 200.0, 324.0)
                                                     cornerRadius: 18.0];
    for (NSUInteger i = 1; i <= 4; i  ){

        UIGraphicsBeginImageContext( CGSizeMake(200.0, 324.0) );

        // clear background
        [[UIColor clearColor] set];
        UIRectFill( CGRectMake(0.0, 0.0, 200.0, 324.0) );

        // fill the rounded rectangle
        [path fill];

        UIImage *image = [UIImage imageNamed:@"ClearImage.png"];

        UIGraphicsEndImageContext();

        // put the image into our list
        [_icons addObject: image];
    }
}

[_gridView reloadData];
  

Комментарии:

1. РЕДАКТИРОВАТЬ: код теперь работает отлично благодаря предложению Дениса. Спасибо всем, кто ответил.

2. Странно, что код нигде не ссылается на ваш documents массив.

3. Я думаю, что это как-то связано со специальным классом documentWatcher от Apple из примера.

Ответ №1:

C-массивы не поддерживаются для каждой модификации оператора for в Objective-C. Итак, у вас есть 2 варианта здесь:

  1. используйте обычный цикл for-statement

    for(int idx = 0; idx < KNOWN_DOCUMENTS_COUNT; idx) { … }

  2. Создайте пользовательский подкласс NSEnumerator и используйте его … однако, я полагаю, это будет большой накладной расход для этого случая

Комментарии:

1. Красивые. Спасибо. Я поставлю галочку, как только истечет этот подлый срок.

Ответ №2:

Я не уверен, что полностью понимаю, о чем вы спрашиваете:

 for(NSString * myStr in _icons) {
  

Это не сработает, потому что _icons == nil . Почему вы не можете создать строки перед этой строкой?

Вам также нужно сделать это NSArray.

Комментарии:

1. Ответ Дениса был тем, что я искал, спасибо за критику!

Ответ №3:

Это не имеет никакого смысла:

 if ( _icons == nil )
    {        
        for(NSString * myStr in _icons) {

        _icons = [[NSMutableArray alloc] init];
  

Вам нужно немного отступить назад и понять, что вы делаете.

Добавлено

По-прежнему не работает. Что не так с этой картинкой??

     _icons = [[NSMutableArray alloc] init];
    UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect: CGRectMake(0, 0, 200.0, 324.0)
                                                     cornerRadius: 18.0];
                for(NSString * myStr in _icons) {
        UIGraphicsBeginImageContext( CGSizeMake(200.0, 324.0) );
  

Комментарии:

1. Проверьте код сейчас, это полная опечатка, так как это привело бы к инициализации массива 4 раза!

2. Никогда бы не инициализировал массив вообще.

3. Хорошо, проверьте самое последнее редактирование … оно было решено … и что с голосованием против?