UIApplication sharedApplication - keyWindow - это ноль?

Мы можем объявить двухмерный массив и непосредственно хранить элементы во время его объявления как:

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

Здесь int представляет собой элементы целочисленного типа, хранящиеся в массиве, и имя массива - «метки». int является типом данных для всех элементов, представленных внутри скобок «{» и «}», потому что массив представляет собой набор элементов, имеющих один и тот же тип данных.

Возвращаясь к нашему заявлению, написанному выше: каждая строка элементов должна быть записана внутри фигурных скобок. Строки и элементы в каждой строке должны быть разделены запятыми.

Теперь посмотрите на инструкцию: вы можете получить 3 строки и 5 столбцов, поэтому JVM создает 3 * 5 = 15 блоков памяти , Эти блоки могут быть индивидуально обозначены как:

marks[0][0]  marks[0][1]  marks[0][2]  marks[0][3]  marks[0][4]
marks[1][0]  marks[1][1]  marks[1][2]  marks[1][3]  marks[1][4]
marks[2][0]  marks[2][1]  marks[2][2]  marks[2][3]  marks[2][4]

ПРИМЕЧАНИЕ. Если вы хотите сохранить элементы n , то индекс массива начинается с нуля и заканчивается на n- 1 . Другой способ создания двумерного массива состоит в том, чтобы сначала объявить массив, а затем выделить для него память, используя новый оператор.

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

Объединив два выше, мы можем написать:

int marks[][] = new int[3][5];
29
задан Aaron Brager 13 February 2013 в 18:44
поделиться

4 ответа

Этот код был выполнен до [window makeKeyAndVisible];, который находится внутри делегата приложения. Так что не удивительно, почему keyWindow был nil еще.

39
ответ дан nacho4d 13 February 2013 в 18:44
поделиться

Самый простой способ - получить окно от делегата приложения:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
34
ответ дан iwasrobbed 13 February 2013 в 18:44
поделиться

Попробуйте, сначала получите дескриптор UINavigationController, а затем topViewController

let navController = window?.rootViewController as! UINavigationController
let yourMainViewController = navController.topViewController as! ItemsViewController

или

let yourMainViewController = navController.viewControllers.first as! ItemsViewController
1
ответ дан Naishta 13 February 2013 в 18:44
поделиться

Я заметил, что после запуска управляемого доступа свойство keyWindow в [UIApplication sharedApplication], по-видимому, равно нулю.

Это случилось со мной только на iOS7, когда я впервые запускал режим управляемого доступа после его включения в меню «Настройки»> «Основные»> «Управляемый доступ», поэтому начальный вид GAM фактически отображается, а не отображается. прошло.

Так как этот Apple API кажется глючным, я решил использовать следующий код для получения окна, которое я ищу.

NSArray *windows = [[UIApplication sharedApplication] windows];
if ([windows count]) {
    return windows[0];
}
return nil;

Вместо

[[UIApplication sharedApplication] keyWindow];

возможно, вы также можете попробовать использовать

[[[UIApplication sharedApplication] delegate] window];

, как указано iWasRobbed , но у меня это не сработало так как свойство rootViewController недоступно таким образом.

12
ответ дан Community 13 February 2013 в 18:44
поделиться