Порядок инициализации и загрузки UIViewController

Это еще один подход к принудительному использованию PHP из командной строки на 1 и 1.

Войдите в систему с ssh на своем сервере и создайте новый файл с именем .profile там, где вы напишете следующую строку alias php='/usr/local/bin/php5' Войдите в систему с помощью ssh и проверьте версию php с php -v, вы увидите, что версия теперь 5.

37
задан Peter Hosey 13 January 2010 в 02:54
поделиться

3 ответа

Система загрузки просмотра на iPhone работает так:

, когда вы инициализируете контроллер просмотра (либо с -init или -initwithname: bundle :), это на самом деле не создает и инициализировать вид. Когда вы вызовите -View впервые, он вызывает «-LoadView». По умолчанию -LoadView просто загружает вид из файла XIB (Nibname). Если вы переопределите это, хотите, вы несете ответственность за создание представления и присвоении его свойству просмотра просмотра контроллера. В качестве примера:

- (void)loadView
{
   UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
   // add subviews 
   self.view = view;
   [view release];
}

каждый раз, когда вы создаете вид, , который отличается от вида, который становится видимым и показывать на экране , он называет -ViewDidload. (-viewDiDiDiSear / -viewdidDisappear предназначен для видимости вида вида в экране)

, поскольку мы уже вне треск, давайте рассмотрим управление памятью. Когда представление не содержит экрана, система автоматически установит свойство представления контроллера представления на Nil. Проблема состоит в том, что все подпроизводства этого представления протекают. Как так? Что ж, подсчет сохранения для каждого подзрена 2 (представления сохранения подсвидений, а ваш контроллер просмотра имеет к нему выпуск / Ивар). Когда представление является Nil, подсчет сохранения этого представления: 1. Он не имеет смысла для того, чтобы прилипать придерживаться, если представление не отображается, поэтому вы устанавливаете его в Nil в -viewdidunload (который является крюком для Всякий раз, когда вид установлен на Nil).

30
ответ дан 27 November 2019 в 04:43
поделиться

INITWITHNAME INITWITHNIBNAME: BUNDLE: Метод назначенного инициализатора для класса UIViewController.

Попробуйте переопределить и использовать его вместо init:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
    }
    return self;
}

...

UIViewControllerSubClass *someViewController = [[UIViewControllerSubclass alloc] initWithNibName:@"UIViewControllerSubclass" bundle:nil];
16
ответ дан 27 November 2019 в 04:43
поделиться

Не удается передать IHashingService в конструкторе класса Administrator ? Вот так я бы разрешил зависимость.

public class Administrator
{
    private readonly IHashingService _hashingService;

    public Administrator(IHashingService hashingService)
    {
        _hashingService = hashingService;
    }

    // <snip>

    public void SetPassword(string plainTextPassword)
    {
        this.HashedPassword = _hashingService.Hash(plainTextPassword);
    }
}

Edit # 1

При извлечении из модели попробуйте использовать инъекцию на уровне метода.

public void SetPassword(string plainText, IHashingService hasher)
{
    if (hasher == null) throw new ArgumentNullException("hasher");
    this.HashedPassword = hasher.Hash(plainText);
}

Изменить # 2

Кроме того, почему бы не сделать это проще для себя и просто сделать расширение для последовательности?

public static class ExtensionsOfString
{
    public static string Hash(this string s)
    {
        // hash with SHA256
        return hashedString;
    }
}

Хотя я понимаю, что есть «заменяемый» аспект кода использования инъекции зависимости, это не совсем большое дело для этого примера. Вам на самом деле не нужен IPasswordEncrypureService то же самое, путь вам нужен, скажем, ICredidRuAuthorizationService. Если когда-нибудь вы измените алгоритм хеширования с SHA256 на SHA512, теперь вы потеряете силу каждого пароля в вашей базе данных.

-121--3959412-

Чтобы включить ведение журнала во время установки msi, используйте параметр /lvx * logfile.txt . Однако даже это не приведет к регистрации выходных данных STDOUT и STDERR приложений командной строки, вызванных как пользовательское действие.

Если вы сами написали пользовательское действие, вы можете добавить в него такое ведение журнала. Например, библиотеки DTF, поставляемые с wix, имеют удобный метод Session. Регистрация , который можно вызвать. Дополнительные сведения см. в разделе c :\program files\windows installer xml v3\doc\dtf.chm , раздел «Запись управляемых настраиваемых действий».

Если вы не написали приложение, вы можете написать настраиваемое действие, чтобы обернуть его. Такая оболочка может использовать класс процесса .NET Process для вызова исполняемого файла, чтения потоков StandardError и StandardOutput и регистрации всех потоков с помощью метода Session.Log , упомянутого выше.

edit : Я не знаю ни одного стандартного пользовательского действия в wix , которое отправляет выходные данные консоли в журнал. Воспользуйтесь списком рассылки wix-users .

-121--4321278-

gerry3 прав. Это все еще сбивает меня с толку. Проверьте документы на назначенных инициализаторах .

Также обратите внимание, что если ваш контроллер создан загружаемым нибом, то вызывается только initWireCoder. loadView также не вызывается в этом случае.

Из-за этого кажется, что большая часть кода, который я видел, делает большую часть инициализации в вещах, таких как viewDidLoad, хотя это кажется неправильным, но, кажется, это лучший метод, который вызывается в обоих случаях, когда что-то загружается в кончик и создается программно.

Но причина этого в том, что [super init] вызывает loadView и т.д. -

4
ответ дан 27 November 2019 в 04:43
поделиться