#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 варианта здесь:
-
используйте обычный цикл for-statement
for(int idx = 0; idx < KNOWN_DOCUMENTS_COUNT; idx) { … }
-
Создайте пользовательский подкласс 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. Хорошо, проверьте самое последнее редактирование … оно было решено … и что с голосованием против?