2014-11-01 2 views
2

Я сохраняю объект PFInstallation в приложении: didFinishLaunchingWithOptions - я не, прося у пользователя разрешения на push или что-то связанное с устройствомToken - и я нахожу много стандартные поля остаться незаселенной, в том числе:Поля, отсутствующие при сохранении объекта Parse PFInstallation

  • appIdentifier
  • AppVersion
  • APPNAME
  • значок
  • parseVersion
  • TIMEZONE

(Эти столбцы не определены в браузере данных, и не показывают на NSLog объекта PFInstallation.)

  • DeviceType делает получить заселена

Я хватаю и успешно сохраняю устройствоModel и deviceOS в двух настраиваемых столбцах. Но я немного озадачен тем, почему вышеупомянутые столбцы остаются неопределенными.

Вот код:

[Parse setApplicationId:PARSE_APPID_DEV 
       clientKey:PARSE_CLIENTKEY_DEV]; 

// record device model and OS 
NSString *model = [self getDeviceModelAndNumber]; // via sys/utsname.h 
NSString *sysVersion = [[UIDevice currentDevice] systemVersion]; 

PFInstallation *currentInstallation = [PFInstallation currentInstallation]; 
PFUser *loggedUser = [PFUser currentUser]; 
if (loggedUser) 
    [currentInstallation setObject:loggedUser forKey:@"user"]; 

[currentInstallation setObject:model forKey:@"deviceModel"]; 
[currentInstallation setObject:sysVersion forKey:@"deviceOS"]; 
NSLog(@"installation: %@", currentInstallation); 
[currentInstallation saveInBackground]; 

Этот проект был создан в Xcode 6. В другом проекте, созданном в Xcode 5, я делаю по существу то же самое, а столбцы заселяются и сохранены ,

Кто-нибудь еще сталкивается с этим? У меня Googled для этого совсем немного, но не нашел решения. Любая помощь очень ценится.

ответ

9

После многих экспериментов, оказывается, что (удивительно) изменения последней строки в

[currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
    // some logging code here 
}]; 

решает эту проблему. Поэтому, я полагаю, я должен написать ошибку с Parse. (На самом деле, есть уже одна открытая: https://developers.facebook.com/bugs/712949858787516/)

+0

Это работает для меня, как хорошо !! И это ошибка Parse. Не имеет смысла использовать параметр block, так как я не заинтересован в этом результате и ничего не делаю с ним. – rgomesbr

3

Это совершенно отлично работает для меня:

(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    // Store the deviceToken in the current installation and save it to Parse. 

    PFInstallation *currentInstallation = [PFInstallation currentInstallation]; 
    [currentInstallation setDeviceTokenFromData:deviceToken]; 

    currentInstallation.channels = @[ @"YOU_CHANNEL_PREFERENCE" ]; 

    NSLog(@"currentInstallation %@", currentInstallation); 

    // record device model and OS 
    NSString *model = [[UIDevice currentDevice] model]; // deviceModel 
    NSString *osVersion = [[UIDevice currentDevice] systemVersion]; // osVersion 
    NSString *pushType = @"APN"; // pushType 
    NSString *deviceName = [[UIDevice currentDevice] name]; // deviceName 

    [currentInstallation setObject:model forKey:@"deviceModel"]; 
    [currentInstallation setObject:osVersion forKey:@"osVersion"]; 
    [currentInstallation setObject:pushType forKey:@"pushType"]; 
    [currentInstallation setObject:deviceName forKey:@"deviceName"]; 

    NSLog(@"installation: %@", currentInstallation); 

    [currentInstallation saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { 
     // some logging code here 
     NSLog(@"works"); 
    }];  
} 
+1

Никогда не устанавливайте pushType самостоятельно! – Gustav

+0

Как сохранить идентификатор устройства для отправки push-уведомлений, если пользователь уже однажды выбрал YEs для уведомлений, и он удалился? – NaXir

Смежные вопросы