2016-11-25 45 views
-1

我使用下面的代碼從我的持久存儲中獲取數據並分配輸出到一些文本字段從核心數據讀取的字符串得到返回裏面(),我如何訪問沒有()的字符串?

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate]; 

NSManagedObjectContext *context = appDelegate.persistentContainer.viewContext; 

// Fetch the itemDetails from persistent data store 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"TillData"]; 
NSPredicate *predicateItemId =[NSPredicate predicateWithFormat:@"itemId==%@", _transactionDetailViewItemIdTxt.text]; 
NSPredicate *predicateBarCode =[NSPredicate predicateWithFormat:@"noos14 LIKE %@", _transactionDetailViewBarCodeTxt.text]; 
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicateItemId, predicateBarCode]]; 

[fetchRequest setPredicate:predicate]; 

NSError *error = nil; 
self.itemInfo = [[context executeFetchRequest:fetchRequest error:&error] mutableCopy]; 
fetchRequest = nil; 

if([NWTillHelper isDebug] == 1) { 
    NSLog(@"TransactionDetailView:transactionDetailViewItemLookupBtn_Pressed:fetchRequest:error %@", error); 
    NSLog(@"TransactionDetailView:transactionDetailViewItemLookupBtn_Pressed:self.itemInfo.itemId holds %@", [self.itemInfo valueForKey:@"itemId"]); 
    NSLog(@"TransactionDetailView:transactionDetailViewItemLookupBtn_Pressed:self.itemInfo.noos14 holds %@", [self.itemInfo valueForKey:@"noos14"]); 
} 

[self.transactionDetailViewItemIdTxt setText:[NSString stringWithFormat:@"%@", [self.itemInfo valueForKey:@"itemId"]]]; 
[self.transactionDetailViewBarCodeTxt setText:[NSString stringWithFormat:@"%@", [self.itemInfo valueForKey:@"noos14"]]]; 

調試輸出告訴我,我得到了正確的值回如下

TransactionDetailView:transactionDetailViewItemLookupBtn_Pressed:self.itemInfo.itemId holds (
    101064025138011 
) 
2016-11-26 00:04:12.428 NWMobileTill[2282:87496] TransactionDetailView:transactionDetailViewItemLookupBtn_Pressed:self.itemInfo.noos14 holds (
    "09258384394951,09258387434951" 
) 

正如你所看到的,返回的值被包含在()中,我認爲這只是調試輸出,但實際上那些()也存在,當我將字符串分配給文本字段當然沒有意義,這意味着我最終字符串在我的UITextFields看起來像(fooo)

爲什麼我的數據被包含在括號中,如何在沒有括號的情況下訪問實際值?請放心,數據庫中的實際數據不包含在()中

回答

0

executeFetchRequest:error:方法返回NSArray。當你在一個數組上調用valueForKey:時,結果是也是的一個數組。最後,當您使用預期字符串的NSArray時,將調用默認的description方法,其中NSArray包含元素之間的括號和逗號。

所以簡而言之:你得到這些是因爲你試圖像字符串一樣使用數組,而NSArray正在試圖幫助你。

更新:您需要從數組中選擇單個字符串,而不是直接使用數組。即使數組只包含一個元素,也需要這樣做,因爲它仍然是NSArray

+0

一個數組,但我怎麼能知道什麼樣的價值是否在數組中的哪個索引處,如果我不能在數組上使用某種valueForKey?例如,我怎麼能知道itemId是[0,0],因爲這是什麼似乎? –

+0

更新了一些更正。 –

+0

我明白我需要做什麼,我只是不明白如何在不知道索引的情況下如何訪問字符串,fetchRequest返回一個數組,我將其放入另一個數組中,這意味着我有一個數組和數組,我不知道如何知道如何訪問我擁有itemId的對象?我是新來的,所以我理解這個理論,並且試圖將它翻譯成代碼,但是沒有成功,一個簡單的例子會很有幫助 –

0

終於得到它的工作使用這個代碼,其中卡勒是數組從讀取請求返回,我還設置了fetchrequest返回一個NSDict,而不是像這樣

fetchRequest.resultType = NSDictionaryResultType; 



NSString *pelle = nil; 
    NSString *egg = nil; 

    for (id kalle in item) { 
     pelle = [kalle valueForKey:@"itemId"]; 
     egg = [kalle valueForKey:@"noos14"]; 
    }