Относительно редактирования. Вы не можете сделать его верным. Я предлагаю, чтобы Вы обернули то, что Вы хотите в другой класс (или дополнительный метод) стать ближе к синтаксису, в котором Вы нуждаетесь.
т.е.
public class FlagTestCompare
{
public static bool Compare(this FlagTest myFlag, FlagTest condition)
{
return ((myFlag & condition) == condition);
}
}
Я думаю, что документация приводит к некоторой путанице.
Числа, которые я вижу, похоже, константы атрибутов элементов цепочки для ключей .
Однако SecKeychainItemCopyAttributesAndData возвращает структуру SecKeychainAttributeList, которая содержит массив SecKeychainAttributes. Из TFD: тег
4-байтовый тег атрибута. См. «Константы атрибутов элемента цепочки для ключей» для допустимых типов атрибутов.
Константы атрибутов (из множества не «для ключей») представляют собой 4-символьные значения, которые я ожидал увидеть.
Здесь вам нужно сделать две вещи. Во-первых, вам нужно обработать «общие» itemClasses перед вызовом SecKeychainAttributeInfoForItemID ...
switch (itemClass)
{
case kSecInternetPasswordItemClass:
itemClass = CSSM_DL_DB_RECORD_INTERNET_PASSWORD;
break;
case kSecGenericPasswordItemClass:
itemClass = CSSM_DL_DB_RECORD_GENERIC_PASSWORD;
break;
case kSecAppleSharePasswordItemClass:
itemClass = CSSM_DL_DB_RECORD_APPLESHARE_PASSWORD;
break;
default:
// No action required
}
Во-вторых, вам нужно преобразовать attr.tag из FourCharCode в строку, т.е.
NSLog(@"%c%c%c%c %@",
((char *)&attr.tag)[3],
((char *)&attr.tag)[2],
((char *)&attr.tag)[1],
((char *)&attr.tag)[0],
[[[NSString alloc]
initWithData:[NSData dataWithBytes:attr.data length:attr.length]
encoding:NSUTF8StringEncoding]
autorelease]]);
Обратите внимание, что я также вывел данные в виде строки - это почти всегда данные в кодировке UTF8.