2016-10-20 19 views
0

私はXamarin.Formsとポータブルクラスライブラリでアプリケーションを構築しています。このアプリはAndroid、iOS、UWPで使用できます。
私は現在、AndroidとUWPの両方で動作するデータベースを構築しています。同じコードを使用してiOSで実行すると、エラーが発生します。 SQLite.PreparedSqlLiteInsertCommand.ExecuteNonQuery(システムでXamarin.iOS SQLiteException:腐敗

:これはのStackTraceある

破損:

未処理の例外:SQLite.SQLiteException

これは例外メッセージです。 Object [] source)[0x00116] in /Users/fak/Dropbox/Projects/sqlite-net/src/SQLite.cs:2480 at SQLite.SQLiteConnection.Insert(System.Obje ct obj、System.String extra、System.Type objType)/Users/fak/Dropbox/Projects/sqlite-net/src/SQLite.cs:1381の[0x0010e] ---例外のある前の場所からのスタックトレースの終了/ Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks/XamarinのSystem.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()[0x0000c]に がスローされました.IOS.framework/Versions/git/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks。タスクタスク)[0x00047] /Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/クラス/ referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187 at System.Runtime.Co /Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS内のmpilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Taskタスク)[0x0002e] System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Taskタスク)で156 にある、フレームワーク/バージョン/ git/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs: [0x0000b] in /Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/referencesource /mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128 at System.Runtime.CompilerServices.TaskAwaiter`1 [TResult] .GetResult()[0x00000] in/Users/builder/data/lanes/3818/ad1cd42d/source /xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/referencesource/mscorlib/system/runtim E/compilerservices/TaskAwaiter.cs:App2.Model.Database.FormDAO + d__2.MoveNext(AT 357 )[0x00066] Dで:\ SourceTree \ App2の\ App2の\モデル\データベース\ FormDAO.cs:25

これは、未処理の例外があるコードである:

public async void InsertItem(Form Form) 
{ 
    try 
    { 
     var result = await Task.Factory.StartNew(() => database.Insert(Form)); //this line 
    } catch(Exception e) 
    { 
     Debug.WriteLine("e.message" + e.Message + ";;;;" + e.StackTrace); 
    } 
} 

関数のInsertItem(フォーム)は、別の非同期メソッドから約1000回と呼ばれます。

なぜこのコードはiOSでは動作しませんか?

編集:私は取得 その他のエラーがある:

SQLiteの。SQLiteException:SQLite.PreparedSqlLiteInsertCommand.ExecuteNonQuery(System.Objectの[]ソース)[0x00116]で/ユーザ/ FAK/Dropboxの/プロジェクト/ SQLiteのネット/ SRC /時

:例外IOError

のStackTrace SQLite.cs:/Users/fak/Dropbox/Projects/sqlite-net/src/SQLite.csでSQLite.SQLiteConnection.Insert(System.ObjectのをOBJ、余分可能System.String、System.TypeをOBJTYPE)0x0010e]で2480 :1381 ---例外がスローされた以前の位置からスタックトレースの終わり--- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throwで()[0x0000c]で/ユーザ/ビルダー/データ/レーン/ 381 8/ad1cd42d/source/xamarin-macios/_ios-build /ライブラリ/フレームワーク/ Xamarin.iOS.framework /バージョン/ git/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs: System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(System.Threading.Tasks.Taskタスク)[0x00047]で/ユーザ/ビルダー/データ/レーン/ 3818/ad1cd42d /ソース/ xamarin-macios/_iosビルド/図書館で143 /System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System。 Threading.Tasks.Taskタスク)/Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/の[0x0002e] mon/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156 at/Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks /にあるSystem.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(System.Threading.Tasks.Taskタスク)[0x0000b] Xamarin.iOS.framework /バージョン/ gitの/ SRC /モノ/ MCS /クラス/ referencesource/mscorlib /システム/ランタイム/ compilerservices/TaskAwaiter.cs:128 System.Runtime.CompilerServices.TaskAwaiter`1 [TResult] .GetResultで( )[0x00000] in /Users/builder/data/lanes/3818/ad1cd42d/source/xamarin-macios/_ios-build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/ D:\ SourceTree \ App2 \ App2 \ Model \ Database \ CourseDAO.csのApp2.Model.Database.CourseDAO + d__2.MoveNext()[0x00055]での参照ソース/ mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:3535 :26

T彼の例外がほぼ同じ方法を使用している場合throwedが、その後、この行にされています

var result = await Task.Factory.StartNew(() => database.Insert(Course)); 
+1

「データベースディスクイメージが不正です」:デバイス/シミュレータからアプリケーションを手動で削除してデータベースを削除し、再試行してみてください。キューを介してDB操作をシリアライズすることと、異なるタスク/スレッドでこれらの挿入を実行することが考えられます。 – SushiHangover

+0

@SushiHangoverキューを介してDB操作をシリアル化する例がありますか? – 476rick

+1

ConcurrentQueueを使用して「コース」を追加します。キューからオブジェクトを取得してDBに挿入しようとするタスクを作成します。このタスクは、DBへの書き込みをシリアル化します。非同期にキューに書き込むが、DB非同期に書き込まない。 –

答えて

0

問題ユーリSSushiHangoverとしてデータベースに非同期呼び出しは、コメントで指摘されました。

まず私はそれがAndroidとUWPに仕事をしたため、問題がデータベースへの非同期呼び出したと思っていませんでした。しかし、すべての呼び出しを同期させると、データベースはUWP、Android、iOSの3つのプラットフォームすべてで動作しました。

ありがとうございます!

関連する問題