2015-10-26 66 views
1

我有一個包含所有應用程序設置的CoreData記錄。當我讀取單個記錄(使用MagicalRecord)時,我得到一個數組。我的問題是:我可以不使用「[0]」(字段索引),而是使用[@「shopOpens」]來獲得記錄中各個字段的可解決性?如何在不使用[index]的情況下從單個CoreData記錄中獲取字段(屬性)?

我在想這樣的事情,但我不認爲這是正確的:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 1"]; // find old records 
preferenceData = [PreferenceData MR_findAllWithPredicate:predicate inContext:defaultContext]; // source 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSMutableDictionary *preferencesDict = [[userDefaults dictionaryForKey:@"preferencesDictionary"] mutableCopy]; // target 

// start filling the userDefaults from the last Preferences record 
/* 
Printing description of preferencesDict: { 
apptInterval = 15; 
colorScheme = Saori; 
servicesType = 1; 
shopCloses = 2000; 
shopOpens = 900; 
showServices = 0; 
syncToiCloud = 0; 
timeFormat = 12; 
} 
*/ 

[preferencesDict setObject: preferenceData.colorScheme forKey:@"shopOpens"]; 

UPDATE

這是怎麼了,我終於想通了,對於那些誰也有類似的問題:

NSPredicate *filter = [NSPredicate predicateWithFormat:@"aMostRecentFlag == 0"]; // find old records 
NSFetchRequest *freqest = [PreferenceData MR_requestAllWithPredicate: filter]; 
[freqest setResultType: NSDictionaryResultType]; 
NSDictionary *perferenceData = [PreferenceData MR_executeFetchRequest:freqest]; 
+0

爲什麼使用Magical Record和NSUserDefaults來存儲相同的信息?它看起來像NSUserDefaults就足夠了。 –

+0

需要CoreData存儲,因爲它最終將轉到iCloud進行共享。首選項是3個實體之一,也是唯一需要在iCloud中最終修改的商店。 – SpokaneDude

回答

1

聲明:我從來沒有使用神奇的記錄,所以第一部分只是一個受過教育的猜測。

我想,preferenceData是NSArray的一個實例,首先是因爲方法名稱使用findAll這表明它將返回多個實例。其次,一個普通的核心數據提取返回一個數組,find方法沒有明顯的原因返回任何不同的東西。第三,你在你的問題中使用索引操作引用。

因此,preferenceData最有可能是商店中與指定謂詞相匹配的所有對象的數組。你表示只有一個這樣的對象,這意味着你可以抓住第一個對象。

PreferenceData *preferenceData = [[PreferenceData 
    MR_findAllWithPredicate:predicate inContext:defaultContext] firstObject]; 

現在,除非它是零,否則您將擁有核心數據存儲中的對象。

您應該能夠以任何方式引用它,以便訪問其屬性。

但是,請注意,您可以使用NSDictionaryResultType作爲詞典從核心數據中提取對象,這對您來說可能是更好的選擇。

此外,您可以發送dictionaryWithValuesForKeys:到託管對象以獲取特定屬性的字典。

+0

MagicalRecord的確與這個問題無關,我不知道爲什麼我把它放在那裏!這就是說,是的,我知道CoreData返回一個數組;我想採用該數組(由於* mostRecentFlag *,可能只有1條返回的記錄是相關的)。我想記錄這個記錄並檢索每個字段(屬性)並將其放置在一個* managedObject *中,該對象中包含大約50個字段。我知道我可以使用數字索引來實現,但我希望使用* managedObject *中的字段名稱來避免CoreData更改CoreData記錄中屬性的順序。 – SpokaneDude

+1

請閱讀帖子的第二部分。您可以將提取的對象作爲字典返回。您還可以創建一個託管對象和一組鍵的字典。你可以更進一步,並從字典'setValuesForKeysWithDictionary:'中設置值。可可API提供了一個體面的動態界面,用於根據鍵值對改變和觀察對象。 –

+0

我想通了你的幫助...謝謝...我已經更新了這個問題,以顯示我的版本如何做到這一點。 – SpokaneDude

相關問題