0

参照投稿:

コア データ - 基本的な質問

このコードからマネージド オブジェクト コンテキストを取得できます。それは私に別の質問をもたらします。2 つのビュー コントローラーと 1 つの NSObject があります。

  1. ユーザールックアップ (VC)
  2. ユーザールックアップ設定(VC)
  3. FetchProcessor (NSObject)

順番に、Userlookup VC が最初に読み込まれ、Userlookupsettings VC + テキストボックスと UiButton を読み込むボタンがあります。アプリが読み込まれ、SETTINGS uibutton を押すと、問題なく動作します...ただし、検索 (FetchProcessor) を実行してから設定を読み込むと、エラーが発生します (以下を確認してください)。


 if (![[managedObject managedObjectContext] save:&error]) {
        NSLog(@"Unresolved error %@, %@, %@", error, [error userInfo],[error localizedDescription]);
        exit(-1);  // Fail  
    }

エラー:


2010-09-11 03:10:47.148 SAPBasis[975:207] *** -[NSCFString objectID]: unrecognized selector sent to instance 0x3d5d830
2010-09-11 03:10:47.170 SAPBasis[975:207] Serious application error.  Exception was caught during Core Data change processing: *** -[NSCFString objectID]: unrecognized selector sent to instance 0x3d5d830 with userInfo (null)
2010-09-11 03:10:47.170 SAPBasis[975:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFString objectID]: unrecognized selector sent to instance 0x3d5d830'

編集され、関連するコードが追加されました..

ユーザールックアップ:

-(void) searchUser{
        getUserDetailsService=[[GetUserDetailsSOAPService alloc]init]; // where AbstractServiceProvider *getUserDetailsService; and @interface GetUserDetailsSOAPService : AbstractServiceProvider
        [getUserDetailsService setSettingPreference:settings];
        [settings release];
        [getUserDetailsService setDelegate:self];
        RequestDO * request = [[RequestDO alloc]init];
        request.userID=userIdInputField.text;
        [getUserDetailsService setRequestDO:request];
        [request release];
        NSManagedObjectContext *context = self.referringObject;
        [getUserDetailsService setReferringObject:context];
        [getUserDetailsService execute]; // This is the user search function.
        [getUserDetailsService release];
}

-(void) editUserLookupSettings{
    UserLookupSettings *viewVC = [[UserLookupSettings alloc] initWithNibName:@"UserLookupSettings" bundle:nil];
    viewVC.title =  @"Settings for User Lookup";
    NSManagedObjectContext *context = self.referringObject;
    viewVC.referringObject = context;
    [self.navigationController pushViewController:viewVC animated:YES];
    // Manage memory
    [viewVC release];
}

NOW @implementation GetUserDetailsS​​OAPService

-(void)execute{
    TCodeSettings *fetch = [[TCodeSettings alloc] init]; // Where @interface TCodeSettings : NSObject <NSFetchedResultsControllerDelegate>
    fetch.referringObject = self.referringObject;
    resultsOfSettings = [fetch initCode]; // Code details given below. I think so is causing the error when this is called.
    [fetch release];
    self.userData = [[NSMutableDictionary alloc] init];
    self.previewData = [[NSMutableArray alloc] init];

    // Creates new Request object and sets its url
    NSString *URLReq = [self.settingPreference getSOAPPrefix];
    URLReq=[URLReq stringByAppendingString:@"Z_USERLOOKUPWS"];
    URLReq=[URLReq stringByAppendingString:[self.settingPreference getSOAPSuffix]];

    theRequest=[NSMutableURLRequest 
                requestWithURL:[NSURL URLWithString:URLReq]
                cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                timeoutInterval:30.0];

    // Setting specific SOAP headers
    // For SOAP content type is text/xml
    .
    .
    .
    [self makeReqest]; // AbstractServiceProvider we have makeRequest function and it works fine..
}

NOW @interface TCodeSettings : NSObject

- (NSFetchedResultsController *)initCode{
    NSError *error;
    if (![[self fetchedResultsController] performFetch:&error]) {
        // Handle the error
    }else {
        return fetchedResultsController;
    }
}

NOW @interface UserLookupSettings : UITableViewController

- (void)viewDidLoad {   
    NSError *error;
    if (![[self fetchedResultsController] performFetch:&error]) {
        // Handle the error
    }
    [super viewDidLoad];
}

4

2 に答える 2

0

ここでの問題は、ある時点で NSManagedObject を NSString に交換したことです。コンテキストが保存objectIDされると、管理対象オブジェクトであると考えられるものにメッセージが送信されますが、これは文字列オブジェクトであるため、文字列オブジェクトはメッセージを理解できません。

ほとんどの場合、エラーは実際には関係を割り当てるカスタム NSManagedObject サブクラスにあります。管理オブジェクトの代わりに文字列を設定しました。

于 2010-09-11T19:14:30.857 に答える
0

[getUserDetailsS​​ervice setDelegate:self];

これはおそらくあなたのバグかもしれませんが、少なくとも関連するすべてのクラスのヘッダーを見るまではわかりません。

また、すべてのDealloc関数にログを入れて、何かが途中でなくなるかどうかを確認してください.

乾杯

于 2010-09-11T02:43:59.533 に答える