13

iPhone アプリの開発で大きな問題が発生しています。

完全なエラーは次のとおりです。

CoreData: error: Serious application error.  Exception was caught during Core Data 
change processing.  This is usually a bug within an observer of 
NSManagedObjectContextObjectsDidChangeNotification.  -[TimeSpentStudying coordinate]:
unrecognized selector sent to instance 0x21db92d0 with userInfo (null)

2 つの coreData エンティティ (Locations と TimeSpentStudying) があるため、これは奇妙です。しかし、私はそれらが問題だとは思いません。コアデータクラスでプロパティを送信し[TimeSpentStudying coordinate]ていないため、奇妙ですcoordinateTimeSpentStudying

mapView をセットアップしました。ユーザーが mkannotationview の詳細開示ボタンをタップすると、新しいビュー (LibraryTrackTimeViewController) がポップアップしますが、ほとんど使用できません。viewDidLoad で NSLog を呼び出してみましたが、何も表示されませんでした。

mapViewController.m

#pragma mark - NSNotification

- (void)contextDidChange:(NSNotification *)notification
{
  if ([self isViewLoaded]) {
    [self updateLocations];
}

.

- (void)updateLocations
{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Location" inManagedObjectContext:self.managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];

NSError *error;
NSArray * foundObjects = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
    if (foundObjects == nil) {
    FATAL_CORE_DATA_ERROR(error);
    return;
    }

    if (locations != nil) {
    [self.mapView removeAnnotations:locations];
    }

locations = foundObjects;
[self.mapView addAnnotations:locations];

}

-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self
    name:NSManagedObjectContextObjectsDidChangeNotification
    object:self.managedObjectContext];
}

mapViewController.m の prepareForSegue メソッドに関係があると思われるエラー

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
  if (distance < 500) {
  if ([segue.identifier isEqualToString:@"TrackLibraryTimes"]) {
    UINavigationController *navigationController = segue.destinationViewController;

LibraryTrackTimeViewController *controller = (LibraryTrackTimeViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
  }
 }}

大まかな構文で申し訳ありません。SO に慣れてきたばかりです。さらにコードが必要な場合は、お知らせください。ありがとうございます。

4

4 に答える 4

2

フェッチされた結果コントローラーの割り当てを解除することで問題を修正しました。別の画面でオブジェクトを追加/編集していたので、まだフェッチを実行していました。

于 2016-08-23T18:02:28.967 に答える
1

プロジェクトの複雑さにもよりますが、問題のあるメソッドを実装し、そこにブレークポイントを設定することで、これをすばやくキャッチできます。ブレークポイントに到達すると、それが呼び出された場所がわかります。Bob はあなたのおじです。

だからあなたは次のようなものを置くことができます

- (CLLocationCoordinate2D)coordinate{
    // set a breakpoint on the next line
    NSParameterAssert(false);
    return nil;
}

あなたのTimeSpentStudyingクラスで、それが呼び出される場所を確認してください。

完了したら必ず削除してください。

于 2013-06-20T18:14:53.350 に答える
-3

私が試してみたいことのカップル。

  1. シミュレーターからアプリケーションを削除し、アプリをクリーンアップして再度実行します。

  2. あなたのコードを見ると、あるコントローラーから別のコントローラーに managedContextObject を渡しているように感じます。そうする必要はありません。ユーザー AppDelegate sharedInstance を使用して、いつでも managedObject を取得できます。複数のインスタンスを作成するのではなく、シングルトン オブジェクトです。

これら2つを試してみてください。うまくいけば、何らかの答えが見つかるか、修正されるかもしれません.

于 2013-06-20T18:20:21.253 に答える