Как мне создать пользовательскую строку из этого массива? - PullRequest
0 голосов
/ 23 декабря 2011

Привет! Я создал массив из основных данных, используя:

NSArray* invoiceItem =[fetchedResultsController fetchedObjects];

, который возвращает следующее в соответствии с журналом:

"<Invoice: 0x8545900> (entity: Invoice; id: 0x8542dd0 <x-coredata://AF2BBB5C-4135-45EB-A421-5036AE02D2A0/Invoice/p19> ; 
data: {\n    GSTAmount = \"0.75\";\n    amountPaid = nil;\n    cardID = 0;\n    
customer = \"\";\n    date = \"23/12/2011\";\n    incTaxPrice = \"8.25\";\n    
incTaxTotal = \"8.25\";\n    invoiceNumber = a20;\n    itemCode = 1035;\n    
paymentMethod = nil;\n    price = \"7.50\";\n    quantity = 1;\n    saleStatus = I;\n
taxCode = GST;\n    timeStamp = \"2011-12-22 22:10:25 +0000\";\n    total = \"7.5\";\n})",

 "<Invoice: 0x8545c00> (entity: Invoice; id: 0x8543390 <x-coredata://AF2BBB5C-4135-45EB-A421-5036AE02D2A0/Invoice/p20> ; 
data: {\n    GSTAmount = \"0.55\";\n    amountPaid = nil;\n    cardID = 0;\n    
customer = \"\";\n    date = \"23/12/2011\";\n    incTaxPrice = \"6.05\";\n    
incTaxTotal = \"12.1\";\n    invoiceNumber = a20;\n    itemCode = 1040;\n    
paymentMethod = nil;\n    price = \"5.50\";\n    quantity = 2;\n    saleStatus = I;\n
taxCode = GST;\n    timeStamp = \"2011-12-22 22:11:14 +0000\";\n    total = 11;\n})"
)

Моя общая цель - просто создатьСтрока свойства itemCode отформатирована так, чтобы она могла быть столбцом в pdf, поскольку я не знаю другого способа создания таблицы, кроме создания изображения табличного представления и вставки его в PDF.Я хочу избежать этого.

Поэтому вместо этого я пытаюсь получить строку из указанного выше массива, отформатированную как показано ниже

"1035\n1040"

Я не знаю, как получить код элементасвойство из массива само по себе.Обратите внимание, что код товара будет различаться по длине и не всегда будет просто цифрами.

Любая помощь будет оценена !!!Если у кого-то есть какие-либо другие советы или лучший способ достичь того, что я пытаюсь сделать, я во всем:)

Редактировать

Чисто для широты решений,Мне удалось найти решение после того, как я на пару минут отошел от компьютера.Я не собираюсь с моим решением, так как другое кажется более эффективным / в точку.Однако я подумал, что я позволю другим увидеть другой метод.

NSMutableArray *itemCodes =[invoiceItem mutableArrayValueForKey:@"itemCode"];
NSString *holdingString =[NSString stringWithFormat:@"%@",itemCodes];
NSString *itemColumn = [holdingString stringByReplacingOccurrencesOfString:@"," withString:@"\n"];

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Сначала получите массив значений, которые вы хотите. Затем соедините эти значения со строкой. В вашем случае символ новой строки.

NSArray *itemCodes = [invoiceItem valueForKey:@"itemCode"];
NSString *itemCodeString = [itemCodes componentsJoinedByString:@"\n"];

Вы можете выполнить итерацию по свойствам свойства сущности (NSEntityDescription) вашего управляемого объекта Invoice и создать словарь правильно отформатированных строк с ключом для имени каждого свойства.

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

NSArray *invoiceItem;  

Вы можете рассмотреть возможность переименования переменной в invoiceItems или в результаты, чтобы помочь идентифицировать переменную как «контейнер», а не как «экземпляр».

0 голосов
/ 23 декабря 2011

В журнале вы видите строковое представление вашего массива. Вы можете получить эту строку, вызвав [описание счета]. Однако вы не хотите использовать это ни для чего, кроме вывода журнала.

Что вы действительно хотите сделать, так это просмотреть объект массива за объектом и извлечь соответствующую информацию.

//Create your string
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:0];

//Enumerate through the array
//Not sure how your entities are set up, but you'll want to generate your Invoice subclass and include the header
for (Invoice *invoice in invoiceItem) //by the way, I would suggest calling the array invoiceItems as it indicates more than one invoice
{
   //This will add the item code and a new line character to your string
   [string appendStringWithFormat:@"%@\n", invoice.itemCode];
}
//Now that the loop is finished you have a string of all of the items codes on their own line. There is an extra newline at the end that you may not need.
...