На самом деле это лучше:
var code = e.keyCode || e.which;
if(code == 13) { //Enter keycode
//Do something
}
Вот где, я думаю, что-то идет не так. Вы знакомы с NSCoding и обычно применяете его, делая свой объект кодируемым через encodeWithCoder: и initWithCoder: overrides. Все это упростит то, что вы по-прежнему можете использовать NSCoding и NSCoders, не отменяя эти методы. Вы можете кодировать состояние общего объекта без кодирования самого общего объекта. Это предотвращает неудобный вопрос декодирования общего объекта.
Вот пример того, что, я думаю, вы могли бы сделать:
@implementation MySharedObject
+ (id)sharedInstance {
static id sharedInstance = nil;
if (!sharedInstance) {
sharedInstance = [[MyClass alloc] init];
}
}
- (id)init {
if ((self = [super init])) {
NSData *data = /* probably from user defaults */
if (data) { // Might not have any initial state.
NSKeyedUnarchiver *coder = [[[NSKeyedUnarchiver alloc] initForReadingWithData:data] autorelease];
myBoolean = [coder decodeBoolForKey:@"MyBoolean"];
myObject = [[coder decodeObjectForKey:@"MyObject"] retain];
[coder finishDecoding];
}
}
return self;
}
- (void)saveState {
NSMutableData *data = [NSMutableData data];
NSKeyedArchiver *coder = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];
[coder encodeBool:myBoolean forKey:@"MyBoolean"];
[coder encodeObject:myObject forKey:@"MyObject"];
[coder finishEncoding]
// Save the data somewhere, probably user defaults...
}
@end
Здесь у нас есть общий объект, и он использует архив с ключами для сохранения конфигурации, но мы не кодируем сам разделяемый объект. Это позволяет избежать неудобного вопроса о декодировании второго экземпляра одноэлементного класса.
"Fatal Error", as it's name indicates, is Fatal : it stop the execution of the script / program.
If you are using PHP to generate web pages and get a Fatal error related to max_execution_time
which, by defaults, equals 30 seconds, you are certainly doing something that really takes too mych time : users won't probably wait for so long to get the page.
If you are using PHP to do some heavy calculations, not in a webpage (but via CLI, or a cron, or stuff like that), you can set another (greater) value for max_execution_time
.
У вас есть два способа сделать это:
Во-первых, изменить php.ini, чтобы установить это значение (оно уже находится в файле; просто отредактируйте значение свойства). Проблема в том, что он изменит его также для веб-сервера, что плохо (в конце концов, это мера безопасности) . Лучше создать копию php.ini, названную, например, phpcli.ini, и изменить этот файл. Затем используйте его при вызове php:
php -c phpcli.ini myscript.php
Это будет отлично работать, если у вас есть много свойств, которые нужно настроить для выполнения CLI. (Например, memory_limit
, который часто должен быть установлен на более высокое значение для длительно выполняющихся пакетов)
Другой способ - определить другое значение для max_execution_time
при вызове php , например:
php -d max_execution_time=60 myscript.php
Это замечательно, если вы запускаете это, например, через crontab.
вы назначаете lval синглтону, затем создаете новый объект и переназначаете lval этому новому объекту БЕЗ изменения синглтона. Другими словами://Set venue to point to singleton
Venue *venue = [Venue sharedVenue];
//Set venue2 to point to singleton
Venue *venue2 = [Venue sharedVenue];
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
//Set venue to unarchived object (does not change the singleton or venue2)
venue = [unarchiver decodeObjectForKey:@"Venue"];
[unarchiver finishDecoding];
Вы хотите разобраться с этим в sharedVenue. Есть несколько способов создания синглтонов, поэтому я не могу быть уверен, что вы делаете, но давайте предположим, что sharedVenue в настоящее время выглядит примерно так:
static Venue *gSharedVenue = nil;
- (Venue *) sharedVenue {
if (!gSharedVenue) {
gSharedVenue = [[Venue alloc] init];
}
return gSharedVenue;
}
Предполагая, что это тот случай, когда вы хотите изменить его для загрузки объекта в глобальная поддержка синглтона:
static Venue *gSharedVenue = nil;
- (Venue *) sharedVenue {
if (!gSharedVenue) {
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
[data release];
gSharedVenue = [unarchiver decodeObjectForKey:@"Venue"];
[unarchiver finishDecoding];
[unarchiver release];
}
if (!gSharedVenue) {
gSharedVenue = [[Venue alloc] init];
}
return gSharedVenue;
}
Очевидно, вам нужно каким-то образом передать фактический путь к архивному объектному файлу.
РЕДАКТИРОВАТЬ НА ОСНОВЕ КОММЕНТАРИИ:
Хорошо, если вы используете синглтон, основанный на распределении, вам нужно иметь дело с этим в методе инициализации классов:
- (id) init {
self = [super init];
if (self) {
NSData *data = [[NSMutableData alloc] initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
[data release];
Venue *storedVenue = [unarchiver decodeObjectForKey:@"Venue"];
[unarchiver finishDecoding];
[unarchiver release];
if (storeVenue) {
[self release];
self = [storedVenue retain];
}
}
return self;
}