Nano Hash - криптовалюты, майнинг, программирование

Бета-тестирование, вход через Facebook, Parse. Информация некоторых пользователей Facebook не сохраняется в Parse. Быстрый

parse result Я нахожусь в стадии бета-тестирования, и на данный момент 5 пользователей полностью успешно вошли в систему и работают с приложением. Однако информация о 3 пользователях Facebook не сохраняется в Parse, и приложение вылетает, когда они пытаются перейти в виртуальную среду, которая загружает профиль пользователя. Я не понимаю, что происходит. Вот мой код входа, он покажется очень дилетантским и грязным, так что заранее извиняюсь! (Новичок, но пытается) Делегат приложения:

import UIKit
import Bolts
import Parse
import ParseUI
import FBSDKCoreKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

// code in here to check devices just left it out as it was too much information to paste.
    }

    // parse info and connection

    Parse.enableLocalDatastore()

    Parse.setApplicationId("",
        clientKey: "")


    PFFacebookUtils.initializeFacebookWithApplicationLaunchOptions(launchOptions)

    PFUser.enableAutomaticUser()

    let defaultACL = PFACL();

    defaultACL.setPublicReadAccess(true)

    PFACL.setDefaultACL(defaultACL, withAccessForCurrentUser:true)


    if application.applicationState != UIApplicationState.Background {

        let preBackgroundPush = !application.respondsToSelector("backgroundRefreshStatus")
        let oldPushHandlerOnly = !self.respondsToSelector("application:didReceiveRemoteNotification:fetchCompletionHandler:")
        var noPushPayload = false;
        if let options = launchOptions {
            noPushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] != nil;
        }
        if (preBackgroundPush || oldPushHandlerOnly || noPushPayload) {
            PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions)
        }
    }
    if application.respondsToSelector("registerUserNotificationSettings:") {
        let userNotificationTypes: UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
        let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()
    } else {
        let types: UIRemoteNotificationType = [UIRemoteNotificationType.Badge, UIRemoteNotificationType.Alert, UIRemoteNotificationType.Sound]
        application.registerForRemoteNotificationTypes(types)
    }


    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

    let installation = PFInstallation.currentInstallation()
    installation.setDeviceTokenFromData(deviceToken)
    installation.saveInBackground()

    PFPush.subscribeToChannelInBackground("") { (succeeded: Bool, error: NSError?) in
        if succeeded {
            print("ParseStarterProject successfully subscribed to push notifications on the broadcast channel.");
        } else {
            print("ParseStarterProject failed to subscribe to push notifications on the broadcast channel with error = %@.", error)
        }
    }
}

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    if error.code == 3010 {
        print("Push notifications are not supported in the iOS Simulator.")
    } else {
        print("application:didFailToRegisterForRemoteNotificationsWithError: %@", error)
    }
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    PFPush.handlePush(userInfo)
    if application.applicationState == UIApplicationState.Inactive {
        PFAnalytics.trackAppOpenedWithRemoteNotificationPayload(userInfo)
    }
}

func application(application: UIApplication,
    openURL url: NSURL,
    sourceApplication: String?,
    annotation: AnyObject) -> Bool {
        return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}

func applicationDidBecomeActive(application: UIApplication) {
    FBSDKAppEvents.activateApp()
}
}

Просмотр контроллера:

import UIKit
import Parse
import FBSDKCoreKit
import FBSDKShareKit
import FBSDKLoginKit
import ParseUI

class LoginViewController: UIViewController {

var firstName: String!
var lastName: String!

@IBAction func logInWithFacebook(sender: AnyObject) {

    let permissions = ["public_profile", "email"]


    PFFacebookUtils.logInInBackgroundWithReadPermissions(permissions, block: {

        (user: PFUser?, error: NSError?) -> Void in

        if let error = error {

            print(error)

        } else {
            // user successfully signed in:


            if let user = user {
              self.performSegueWithIdentifier("registerFacebookSegue", sender: self)

            }

                }
    })


}

override func viewDidAppear(animated: Bool) {

    //to log user out

  //  PFUser.logOut()

    // segue if user is logged in:


    if let username = PFUser.currentUser()?.username {


            self.performSegueWithIdentifier("loggedInProfileSegue", sender: self)

    }


}

override func viewDidLoad() {
super.viewDidLoad()



    if(FBSDKAccessToken.currentAccessToken() != nil) {

        print("user logged in")
    } else {
        print("user not logged in")
    }
}


override func prefersStatusBarHidden() -> Bool {
    return true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

Получил пароли facebook от пользователя, который не работал, и попытался войти в систему с помощью xcode и подключенного телефона, получил эту ошибку:

* Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Невозможно использовать nil для ключей или значений в PFObject. Используйте NSNull для значений. * Первый стек бросить вызов: (0x183608f48 0x1980cbf80 0x183608e90 0x1000e49a8 0x1000e8e98 0x10012d344 0x1000e8eec 0x100062ec8 0x1000976f4 0x10009e1c0 0x10009df90 0x10009da44 0x1834ff990 0x1834ff800 0x10009d800 0x10009cd00 0x10009aed4 0x100097eb8 0x100097e10 0x100098288 0x182e9b6a8 0x182e9b638 0x182e9b7ac 0x182d074fc 0x182df5b38 0x101461c68 0x10146b40c 0x182cf3ce4 0x1834ec6cc 0x182cf3bc8 0x182cf3a88 0x182cf38b4 0x1835c0544 0x1835bffd8 0x1835bdcd8 0x1834ecca0 0x18e728088 0x188c04ffc 0x10006e488 0x19891a8b8) libc++abi.dylib: завершение с необработанным исключением типа NSException (lldb)


Ответы:


1

Проблема заключалась в том, что я просил адрес электронной почты в своих запросах, а не у всех учетных записей facebook есть адрес электронной почты. действительные адреса электронной почты и b. любой адрес электронной почты связан вообще. Поэтому мне пришлось удалить этот запрос и попросить пользователя ввести свой адрес электронной почты отдельно.

16.12.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


© 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование