Конвертировать дату php в target-c - PullRequest
0 голосов
/ 21 марта 2012

Я пытаюсь найти временной интервал с момента последнего хода в игре. Обычно в target-c я делаю это, и это прекрасно работает:

    NSDate *now = [NSDate date]; 
    NSDate *before = [NSDate dateWithTimeInterval:-60 sinceDate:now]; 

    NSTimeInterval interval = [now timeIntervalSinceDate: before]; 

Я храню дату lastTurn в базе данных MySQL:

timestamp   -   ON UPDATE CURRENT_TIMESTAMP

Когда я пытаюсь получить дату в target-c, кажется, что она работает:

    NSDate *lastTurn = match.lastTurn; 
    NSLog(@"lastTurn: %@", lastTurn);

    Output: lastTurn: 2012-03-21 09:40:32

... однако, когда я пытаюсь сделать интервал времени, я получаю - [__ NSCFString timeIntervalSinceReferenceDate]: нераспознанный селектор, отправленный на ошибку экземпляра.

    NSDate *lastTurn = match.lastTurn; 
    NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate: lastTurn]; 

Любые предложения будут потрясающими. Спасибо

EDIT

Я использую ASIHTTPRequest для получения информации из базы данных на iphone.

Класс Match - это простой класс, который содержит переменные:

@property (nonatomic, strong) NSDate *lastTurn; 
etc...

... И я получаю переменную следующим образом:

    [request setCompletionBlock:^
    {

     for (NSDictionary *dict in responseDict)
     {                
             Match *match = [[Match alloc] init];  
             match.lastTurn = [dict objectForKey:@"lastTurn"]; 

1 Ответ

3 голосов
/ 21 марта 2012

(отказ от ответственности: я ничего не знаю о цели-c, так что это может быть полная чушь, только чтение документации ведет к опасным поверхностным знаниям ;-))

Мои ставки на

NSDate *lastTurn = match.lastTurn;
NSLog(@"className of lastTurn is %@", [lastTurn className]);

печатает className of lastTurn is __NSCFString, и вам нужно преобразовать эту строку в экземпляр NSDate с помощью, например, dateWithString , прежде чем использовать его как экземпляр NSDate.


Ссылка на класс NSDate говорит:

Единственный примитивный метод NSDate, timeIntervalSinceReferenceDate , обеспечивает основу для всех других методов в интерфейсе NSDate.
Это означает, что timeIntervalSinceReferenceDate вызывается как [NSDate date], так и lastTurn.
. В сообщении об ошибке -[__NSCFString timeIntervalSinceReferenceDate] говорится (если я не ошибаюсь), что селектор timeIntervalSinceReferenceDate был отправленэкземпляр __NSCFString, то есть «аромат» NSString, а не экземпляр NSDate.
Поскольку [NSDate date] - это , скорее всего, экземпляр NSDate остается только lastTurn.

Я предполагаю, что все записи в responseDict являются строками, а простой NSDate *lastTurn = match.lastTurn; не выполняет никакого преобразования, даже проверки типа (duck-).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...