2010-02-01 2 views
0

У меня есть несколько основных объектов данных, которые содержат пустую строку NSString.Исходное значение свойств объектов основных данных?

Я разбираю некоторые XML и устанавливаю свойства, которые я могу получить, и хотел бы установить «пустые» в «n/a», как в «недоступном». Поэтому, если мой XML не содержит значения, которые он сортирует в Entity, предоставляя ему строку «n/a», которую я могу проверить позже, также если один из них сделает это в UILabel, он не отобразит (null) .. что приводит меня к вопросу:

Я делаю это, чтобы проверить, если имущество на Entity уже сидел, является ноль или пуст:

for(NSString *s in allPossibleStrings) { 

     if([[f valueForKey:s] isKindOfClass:[NSString class]] && [[f valueForKey:s] isEqualToString:@""]) { 
      [f setValue:@"n/a" forKey:s]; 
     } 
     if ([[f valueForKey:s] isKindOfClass:[NSString class]] && [f valueForKey:s] == nil) { 
      [f setValue:@"n/a" forKey:s];    
     } 
    } 

оказывается однако я все еще получаю много значений, отображаемых как (null). Так я думал, может свойство быть что-то другое, чем @"" пустой или (nil)

Я считаю, что NSManagedObject должен быть КВЦ соответствует, так что я сделала тест, где я скопировали мою собственность NSManagedObject свойством, только разница в том, что является подклассом просто NSObject вместо NSManagedObject. К сожалению, это ведет точно так же. Он также оставляет значения как (NULL)

Надежда кто-то может забрать, где я пойти не так с этими строковых тестов :)

Thank You

+1

'[[f valueForKey: s] isKindOfClass: [NSString class]] && [f valueForKey: s] == nil' Это не имеет смысла. Если '[f valueForKey: s]' is 'nil', то первое сообщение является сообщением' nil', поэтому оно просто вернет 'NO' (см. Http://developer.apple.com/mac/library/ документация/какао/концептуальная/ObjectiveC/Статьи/ocObjectsClasses.html # // apple_ref/doc/uid/TP30001163-CH11-SW7). Это делает все выражение ложным, поэтому утверждение, что это условие не будет выполнено, никогда не будет выполнено. –

+0

Привет, Питер. Да! конечно :) Если я совмещу свой ответ и ответ Kendalls, он должен быть: «если объект isKindOfClass: NSString && isEqualToString @» «... установить его в @" n/a "или если объект kindOfClass: NSNull установил его на @ «n/a». Это дает мне некоторые знания, которые я могу использовать в будущем. Спасибо вам обоим. – RickiG

ответ

4

Вы можете установить значение свойства по умолчанию вашего лица к «N/A» (это хорошая практика, потому что вы можете использовать SQLite для доставки приложений iPhone, и это не работает с нулевыми значениями, потому что sqlite и какао не имеют того же видения «null») и установите «Необязательно» на «Нет».

if([[f valueForKey:s] isKindOfClass:[NSString class]] && [[f valueForKey:s] isEqualToString:@"NA"]) { 
     //Tell your program to know that it's null if it needs to know 
    } 

Приветствия

+0

Привет, Жюльен. Я думаю, я мог бы полностью удалить проблему, выполнив это :) – RickiG

1

Что такое allPossibleStrings? Вы можете сделать это, чтобы добраться до всех свойств:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntityName" inManagedObjectContext:moc]; 

for (NSString *attr in [entity attributesByName]) { 
    [object setValue:@"n/a" forKey:attr]; 
} 
+0

Привет, Яanus. это список свойств, которые я «разрешил» изменять. Существуют значения, которые не должны быть перезаписаны или изменены, поэтому я сохраняю массив строк для значений, которые я могу изменить в категории. – RickiG

0

Проблема в том, что когда что-то отсутствует, что вы можете получить обратно от любого управляемого объекта собственности (не только строки) является объектом NSNull. Поэтому, если вы также отметите isKindOfClass:[NSNull class], я думаю, что ваш код будет делать то, что вы хотите.

Смежные вопросы