Приложение сканера штрих-кода Использование ZXing Xamarin для iOS приводит к ошибке нулевой ссылки в классе приложения - PullRequest
0 голосов
/ 05 марта 2019

Мне нужно приложение для сканера штрих-кодов / QR-кодов для моей компании, которое должно работать на iPhone и Android, но в основном на iPhone.Я решил попробовать Xamarin Forms, и он отлично работал на Android, но приложил немало усилий, чтобы приложение даже появилось на iPhone.Наконец-то я открыл его на iPhone, но когда я нажимаю на кнопку сканирования, он выдает
необработанное исключение:

System.NullReferenceException: Object reference not set to an instance of an 
object`

в классе приложения на UIApplication.Main (args, null, "AppDelegate ");

using System;
using System.Collections.Generic;
using System.Linq;

using Foundation;
using UIKit;

namespace QRNatives.iOS
{
    public class Application
{
    // This is the main entry point of the application.
    static void Main(string[] args)
    {
        // if you want to use a different Application Delegate class from "AppDelegate"
        // you can specify it here.
        UIApplication.Main(args, null, "AppDelegate");
    }
}
}

Я не программировал слишком долго, но кажется, что обычно ошибки нулевой ссылки довольно легко отследить.Тем не менее, я не могу видеть, где проблема на самом деле происходит с этим.Я подозреваю, что проблема в AppDelegate.cs, хотя на самом деле мне ничего не выпирает.

using Foundation;
using UIKit;

namespace QRNatives.iOS
{
// The UIApplicationDelegate for the application. This class is responsible for launching the 
// User Interface of the application, as well as listening (and optionally responding) to 
// application events from iOS.
[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
    //
    // This method is invoked when the application has loaded and is ready to run. In this 
    // method you should instantiate the window, load the UI into it and then make the window
    // visible.
    //
    // You have 17 seconds to return from this method, or iOS will terminate your application.
    //
    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        global::Xamarin.Forms.Forms.Init();

        global::ZXing.Net.Mobile.Forms.iOS.Platform.Init();

        LoadApplication(new App());

        return base.FinishedLaunching(app, options);
    }
}
}

Просто для получения дополнительной информации, вот что я использую для QrScanningService.cs для связи iOS с общимданные интерфейса.

using System.Threading.Tasks;
using QRNatives.Services;
using Xamarin.Forms;
using ZXing.Mobile;

[assembly: Dependency(typeof(QRNatives.iOS.Services.QrScanningService))]

namespace QRNatives.iOS.Services
{
class QrScanningService
{
    public class QrCodeScanningService : IQrScanningServies
    {
        public async Task<string> ScanAsync()
        {
            var scanner = new MobileBarcodeScanner();
            var scanResults = await scanner.Scan();

            return scanResults.Text;
        }
    }
}
}

Я обыскал несколько старых постов, где возникла эта проблема, но ни один из прочитанных мною не дал реальных ответов на эту проблему.Кто-нибудь имел опыт успешного использования ZXing с Xamarin для iOS?Или у кого-нибудь есть предложения о том, как еще я могу отследить, откуда на самом деле происходит ошибка?Я застрял на этом некоторое время, поэтому любая помощь будет принята с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 07 марта 2019

Для доступа к camera в iPhone необходимо добавить разрешение в info.plist:

 <key>NSCameraUsageDescription</key>      
 <string>Camera acess to scan barcodes</string>

К редактированию info.plist внутри Visual Studio:

Щелкните правой кнопкой мыши info.plist и выберите open with, вы можете выбрать Generic PList Editor или XML editor (что хотите) для редактирования.

Дополнительные разрешения:

См .: Справочник по инфоплисту

...