проблема fetchresultscontroller или контекст управляемого объекта? - PullRequest
0 голосов
/ 11 сентября 2010

Ссылка POST:

Основные данные - основные вопросы

Я могу получить контекст управляемого объекта из этого фрагмента кода.Это подводит меня к другому вопросу.У меня есть 2 КОНТРОЛЛЕРА ПРОСМОТРА и 1 NSObject

  1. Userlookup (VC)
  2. UserlookupSettings (VC)
  3. FetchProcessor (NSObject)

Поочередно Userlookup vc загружается первым и имеет кнопку для загрузки Userlookupsettings VC + текстовое поле и 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'

ИЗМЕНЕНО и добавлены соответствующие коды ..

UserLookup:

-(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];
}

СЕЙЧАС @implementation GetUserDetailsSOAPService

-(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..
}

СЕЙЧАС @interface TCodeSettings: NSObject

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

СЕЙЧАС @interface UserLookupSettings: UITableViewController 10 * * * *


Ответы [ 2 ]

0 голосов
/ 11 сентября 2010

Ваша проблема в том, что в какой-то момент вы поменяли NSManagedObject на NSString.Когда контекст сохраняется для сохранения, он отправляет сообщение objectID тому, что он считает управляемым объектом, но поскольку это строковый объект, строковый объект не понимает сообщение.

Скорее всего, ошибка на самом деле в пользовательском подклассе NSManagedObject, где вы назначаете связь.Вы установили строку вместо управляемого объекта.

0 голосов
/ 11 сентября 2010

[getUserDetailsService setDelegate: сам];

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

А также, поместите Logs во все ваши функции Dealloc, чтобы увидеть, происходит ли что-то преждевременное.

Приветствия

...