Во-первых, извините, если заголовок сбивает с толку, я не уверен, как еще это сложить. Я кратко объясню свое приложение.Передайте NSObject (условные данные) в TableView
Пользователь для входа в систему экрана (очень основной, ни на стороне сервера вещи), в котором они могут войти в трех различных компаний (Company A, Company B, and Company C)
в таком порядке. После того, как пользователь успешно выполнил вход в систему Company A
, они представлены в TableView
. LoginViewController
(нормальный ViewController
) загружает файл ListOfClinics.xml
из Dropbox и анализирует его с помощью NSXMLParser
и передает объект в ClinicsViewController
, чтобы отобразить список местоположений клиник.
ListOFClinics.xml
пример:
<Clinic>
<Location>
<Clinic_Location>Manchester</Clinic_Location>
</Location>
<Location>
<Clinic_Location>Liverpool</Clinic_Location>
</Location>
<Location>
<Clinic_Location>Birmingham</Clinic_Location>
</Location>
<Location>
<Clinic_Location>London</Clinic_Location>
</Location>
<Location>
<Clinic_Location>Leeds</Clinic_Location>
</Location>
</Clinic>
ClinicViewController
является TableViewController
. Пока таблица заполняется, приложение загружает другой файл из Dropbox (Clients.xml
) и анализирует его готовность к использованию. Идея состоит в том, что пользователь может нажать на TableView cell
, содержащий такое местоположение, как Манчестер, а недавно проанализированные данные из Clients.xml
должны перейти к следующему виду (ClientsViewController
) и показать всех клиентов, зарегистрированных в клинике Манчестера.
Clients.xml
пример:
<Client>
<Clinic_Location>Manchester</Clinic_Location>
<Client_Forename>Frank</Client_Forename>
<Client_Surname>Wade</Client_Surname>
<Client_Address_Line_1>Law Lane</Client_Address_Line_1>
<Client_Address_Line_2>Money House</Client_Address_Line_2>
<Client_Address_Line_3>Didsbury</Client_Address_Line_3>
<Client_Address_Line_4>Manchester</Client_Address_Line_4>
<Client_Address_Line_5></Client_Address_Line_5>
<Client_Postcode>M20 2WS</Client_Postcode>
<Client_Tel>01615559090</Client_Tel>
<Appt_Time>15:30</Appt_Time>
<Appointment_Attended>Booked</Appointment_Attended>
<Passed_To_Medical>Complete Pass</Passed_To_Medical>
<Passed_To_Sol>no</Passed_To_Sol>
</Client>
<Client>
...
</Client>
Как вы можете видеть, как XML-файлы имеют Clinic_Location
элемент. Я не слишком беспокоюсь о проверке ошибок, чтобы убедиться, что данные в них совпадают (файлы .xml экспортируются через другую систему, поэтому оба должны иметь одинаковые местоположения). Что мне нужно реализовать, так это то, что когда кто-то нажимает на Манчестер, следующий TableView
представлен списком Клиентов, которые зарегистрированы в Манчестерской клинике.
Update
Я создал новый класс NSObject
, объявляя все свойства в ClientData.h и синтезируя их в ClientData.m
.
ClientData.h
@interface ClientData : NSObject
@property (strong) NSString *clinicLocation;
@property (strong) NSString *foreName;
...
ClientData.m
@implementation ClientData
@synthesize clinicLocation;
@synthesize foreName;
...
Ниже приведен фрагмент моего парсера компонента, используя KVC для хранения анализируемые данные.
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"Client"]) {
// save to data structure object with KVC
ClientData *clientData = [[ClientData alloc]init];
clientData.clinicLocation = clinicLocation
clientData.foreName = foreName;
...
// count number of clients
clientCount++;
[client setObject:clinicLocation forKey:@"Clinic_Location"];
[client setObject:foreName forKey:@"Client_Forename"];
...
[dataStart addObject:[client copy]];
}
}
Если я вхожу в NSObject
строку с NSLog(@"Forename: %@", clientData.foreName);
и т.д., выход правильно.
Я использую раскадровку с перетекает нажать на следующий вид. Должен ли я использовать prepareForSegue
для передачи NSObject (ClientData)
или tableView didSelectRowAtIndexPath
? Вот то, что я пробовал:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showClients"]) {
// clientData is declared on the destinationViewController
PCClientsViewController *pcClients = segue.destinationViewController;
pcClients.clientData = [[ClientData alloc]init];
pcClients.clientData.foreName = foreName;
}
}
Это работает, хотя только один foreName
значение становится передавалось к следующему TableView
. Мой класс NSObject
сохраняет только одно значение каждый раз, когда я ему что-то присваиваю? Другими словами, если я анализирую 100 записей с 100 foreName
атрибутами, все 100 значений сохраняются или только последние?
Я до сих пор не знаю, что тест делать здесь и только передать соответствующие данные в следующем виде (то есть., Если пользователь нажимает на Manchester
, пройти все клиенты с Clinic_Location
из Manchester
к следующему представлению). Должен ли я создать новый класс NSObject
для хранения данных ListOfClinics.xml
и проверить его на значение CLinic_Location
в моем ClientData NSObject
?
Спасибо за ответ. Пожалуйста, см. Мое обновленное сообщение: я реализовал ваше решение, но я борюсь с передачей только соответствующих данных в следующий вид (см. Последний абзац). – rosshump
Вы должны использовать 'clientData.clinicLocation = clinicLocation' или' [clientData setClinicLocation: clinicLocation] 'вместо' [clientData setValue: clinicLocation forKey: @ "clinicLocation"] '. Эти методы уже созданы для вас, когда вы используете '@ property'. –
Хорошо спасибо, это удобно знать! Я обновил свой вопрос с вашим кодом. Кажется, что это хорошо работает, теперь я могу передать некоторые данные, такие как 'foreName', хотя передается только последнее проанализированное значение foreName. Всегда ли перезаписываются значения в моем классе 'NSObject'? У меня есть более 100 клиентских записей, поэтому, например, если в Манчестере есть 10 тегов «Clinic_Location», когда я нажимаю на «Манчестер», я должен увидеть этих 10 клиентов и все подробности («surName, адрес, почтовый индекс» и т. Д.). Я подошел к этому неправильно? Я не хотел усложнять работу с Core Data ... – rosshump