Version 0.2
This commit is contained in:
parent
04dd58a040
commit
3e9eb6a7e0
@ -17,10 +17,26 @@
|
||||
B506EC7915EBF67500566A27 /* EspagramViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B506EC7815EBF67500566A27 /* EspagramViewController.m */; };
|
||||
B506ECA515EE898700566A27 /* SpanishConjugator.m in Sources */ = {isa = PBXBuildFile; fileRef = B506ECA415EE898700566A27 /* SpanishConjugator.m */; };
|
||||
B512F63B164BEC6000DA031E /* EspagramTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F63A164BEC6000DA031E /* EspagramTestViewController.m */; };
|
||||
B512F64A164C2A2700DA031E /* Tense.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F649164C2A2700DA031E /* Tense.m */; };
|
||||
B512F658164D1A0C00DA031E /* EspagramConjugationTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F657164D1A0C00DA031E /* EspagramConjugationTableViewController.m */; };
|
||||
B512F670164D60DB00DA031E /* EspagramMainTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B512F66F164D60DB00DA031E /* EspagramMainTableViewController.m */; };
|
||||
B5EFD38C162CA69F00C6E2EB /* GrammarTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EFD38B162CA69F00C6E2EB /* GrammarTestViewController.m */; };
|
||||
B51F8E21164FF8930033B614 /* Tense.m in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E20164FF8930033B614 /* Tense.m */; };
|
||||
B51F8E24165199F80033B614 /* Espagram.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E22165199F80033B614 /* Espagram.xcdatamodeld */; };
|
||||
B51F8E3916519C850033B614 /* EspagramLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E3816519C850033B614 /* EspagramLessonViewController.m */; };
|
||||
B51F8E4416519D440033B614 /* iPhoneIcon_Small.png in Resources */ = {isa = PBXBuildFile; fileRef = B51F8E4316519D440033B614 /* iPhoneIcon_Small.png */; };
|
||||
B51F8E4616519D490033B614 /* iPhoneIcon_Big.png in Resources */ = {isa = PBXBuildFile; fileRef = B51F8E4516519D490033B614 /* iPhoneIcon_Big.png */; };
|
||||
B51F8E4816519FE00033B614 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B51F8E4716519FE00033B614 /* CoreData.framework */; };
|
||||
B54CFB611652D2A700C0823D /* Lesson+Create.m in Sources */ = {isa = PBXBuildFile; fileRef = B51F8E3C16519D090033B614 /* Lesson+Create.m */; };
|
||||
B54CFB6A1652D43900C0823D /* Verb.m in Sources */ = {isa = PBXBuildFile; fileRef = B54CFB691652D43900C0823D /* Verb.m */; };
|
||||
B54CFB6D1652D43900C0823D /* Lesson.m in Sources */ = {isa = PBXBuildFile; fileRef = B54CFB6C1652D43900C0823D /* Lesson.m */; };
|
||||
B54CFB761652E03600C0823D /* EspagramNewLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B54CFB751652E03600C0823D /* EspagramNewLessonViewController.m */; };
|
||||
B56DE15C165412DF00D85DD3 /* EspagramWordsInLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE15B165412DF00D85DD3 /* EspagramWordsInLessonViewController.m */; };
|
||||
B56DE160165426B800D85DD3 /* EspagramAddWordToLessonViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE15F165426B800D85DD3 /* EspagramAddWordToLessonViewController.m */; };
|
||||
B56DE1631654382500D85DD3 /* Lesson+Conjugator.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE1621654382500D85DD3 /* Lesson+Conjugator.m */; };
|
||||
B56DE1661655769300D85DD3 /* TestableVerb.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE1651655769300D85DD3 /* TestableVerb.m */; };
|
||||
B56DE1691655774E00D85DD3 /* Lesson+Test.m in Sources */ = {isa = PBXBuildFile; fileRef = B56DE1681655774D00D85DD3 /* Lesson+Test.m */; };
|
||||
B5A8BB191651A64300C1CC00 /* CoreDataTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B5A8BB181651A3E700C1CC00 /* CoreDataTableViewController.m */; };
|
||||
B5B3F92D165972EF00E26A40 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = B5B3F92F165972EF00E26A40 /* Localizable.strings */; };
|
||||
B5EC6CED1656F1960030C27F /* Verb+Create.m in Sources */ = {isa = PBXBuildFile; fileRef = B5EC6CEC1656F1960030C27F /* Verb+Create.m */; };
|
||||
B5EFD392162CB18000C6E2EB /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = B5EFD391162CB18000C6E2EB /* Default-568h@2x.png */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
@ -42,16 +58,46 @@
|
||||
B506ECA415EE898700566A27 /* SpanishConjugator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpanishConjugator.m; sourceTree = "<group>"; };
|
||||
B512F639164BEC6000DA031E /* EspagramTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramTestViewController.h; sourceTree = "<group>"; };
|
||||
B512F63A164BEC6000DA031E /* EspagramTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramTestViewController.m; sourceTree = "<group>"; };
|
||||
B512F648164C2A2700DA031E /* Tense.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tense.h; sourceTree = "<group>"; };
|
||||
B512F649164C2A2700DA031E /* Tense.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tense.m; sourceTree = "<group>"; };
|
||||
B512F656164D1A0C00DA031E /* EspagramConjugationTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramConjugationTableViewController.h; sourceTree = "<group>"; };
|
||||
B512F657164D1A0C00DA031E /* EspagramConjugationTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramConjugationTableViewController.m; sourceTree = "<group>"; };
|
||||
B512F66E164D60DB00DA031E /* EspagramMainTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramMainTableViewController.h; sourceTree = "<group>"; };
|
||||
B512F66F164D60DB00DA031E /* EspagramMainTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramMainTableViewController.m; sourceTree = "<group>"; };
|
||||
B51F8E1F164FF8930033B614 /* Tense.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Tense.h; sourceTree = "<group>"; };
|
||||
B51F8E20164FF8930033B614 /* Tense.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Tense.m; sourceTree = "<group>"; };
|
||||
B51F8E23165199F80033B614 /* Espagram.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Espagram.xcdatamodel; sourceTree = "<group>"; };
|
||||
B51F8E3716519C850033B614 /* EspagramLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramLessonViewController.h; sourceTree = "<group>"; };
|
||||
B51F8E3816519C850033B614 /* EspagramLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramLessonViewController.m; sourceTree = "<group>"; };
|
||||
B51F8E3C16519D090033B614 /* Lesson+Create.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "Lesson+Create.m"; sourceTree = "<group>"; };
|
||||
B51F8E4316519D440033B614 /* iPhoneIcon_Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iPhoneIcon_Small.png; sourceTree = "<group>"; };
|
||||
B51F8E4516519D490033B614 /* iPhoneIcon_Big.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = iPhoneIcon_Big.png; sourceTree = "<group>"; };
|
||||
B51F8E4716519FE00033B614 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||
B54CFB681652D43900C0823D /* Verb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Verb.h; sourceTree = "<group>"; };
|
||||
B54CFB691652D43900C0823D /* Verb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Verb.m; sourceTree = "<group>"; };
|
||||
B54CFB6B1652D43900C0823D /* Lesson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lesson.h; sourceTree = "<group>"; };
|
||||
B54CFB6C1652D43900C0823D /* Lesson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Lesson.m; sourceTree = "<group>"; };
|
||||
B54CFB741652E03600C0823D /* EspagramNewLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramNewLessonViewController.h; sourceTree = "<group>"; };
|
||||
B54CFB751652E03600C0823D /* EspagramNewLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramNewLessonViewController.m; sourceTree = "<group>"; };
|
||||
B56DE15A165412DF00D85DD3 /* EspagramWordsInLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramWordsInLessonViewController.h; sourceTree = "<group>"; };
|
||||
B56DE15B165412DF00D85DD3 /* EspagramWordsInLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramWordsInLessonViewController.m; sourceTree = "<group>"; };
|
||||
B56DE15E165426B800D85DD3 /* EspagramAddWordToLessonViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EspagramAddWordToLessonViewController.h; sourceTree = "<group>"; };
|
||||
B56DE15F165426B800D85DD3 /* EspagramAddWordToLessonViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EspagramAddWordToLessonViewController.m; sourceTree = "<group>"; };
|
||||
B56DE1611654382500D85DD3 /* Lesson+Conjugator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Lesson+Conjugator.h"; sourceTree = "<group>"; };
|
||||
B56DE1621654382500D85DD3 /* Lesson+Conjugator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Lesson+Conjugator.m"; sourceTree = "<group>"; };
|
||||
B56DE1641655769300D85DD3 /* TestableVerb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestableVerb.h; sourceTree = "<group>"; };
|
||||
B56DE1651655769300D85DD3 /* TestableVerb.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestableVerb.m; sourceTree = "<group>"; };
|
||||
B56DE1671655774D00D85DD3 /* Lesson+Test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Lesson+Test.h"; sourceTree = "<group>"; };
|
||||
B56DE1681655774D00D85DD3 /* Lesson+Test.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Lesson+Test.m"; sourceTree = "<group>"; };
|
||||
B58F57661635D27E00CED51B /* Conjugator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Conjugator.h; sourceTree = "<group>"; };
|
||||
B58F576D16387BE600CED51B /* NSMutableArray_Shuffling.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = NSMutableArray_Shuffling.h; path = Espagram/NSMutableArray_Shuffling.h; sourceTree = "<group>"; };
|
||||
B5EFD38A162CA69F00C6E2EB /* GrammarTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GrammarTestViewController.h; sourceTree = "<group>"; };
|
||||
B5EFD38B162CA69F00C6E2EB /* GrammarTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GrammarTestViewController.m; sourceTree = "<group>"; };
|
||||
B5A8BB171651A3E700C1CC00 /* CoreDataTableViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CoreDataTableViewController.h; sourceTree = "<group>"; };
|
||||
B5A8BB181651A3E700C1CC00 /* CoreDataTableViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CoreDataTableViewController.m; sourceTree = "<group>"; };
|
||||
B5A8BB1A1652C39600C1CC00 /* Lesson+Create.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Lesson+Create.h"; sourceTree = "<group>"; };
|
||||
B5B3F92E165972EF00E26A40 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
B5B3F930165972F600E26A40 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
B5B3F931165AC79200E26A40 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
B5B3F932165AD45400E26A40 /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
B5EC6CEB1656F1960030C27F /* Verb+Create.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Verb+Create.h"; sourceTree = "<group>"; };
|
||||
B5EC6CEC1656F1960030C27F /* Verb+Create.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Verb+Create.m"; sourceTree = "<group>"; };
|
||||
B5EFD391162CB18000C6E2EB /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
@ -60,6 +106,7 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
B51F8E4816519FE00033B614 /* CoreData.framework in Frameworks */,
|
||||
B506EC6315EBF67500566A27 /* UIKit.framework in Frameworks */,
|
||||
B506EC6515EBF67500566A27 /* Foundation.framework in Frameworks */,
|
||||
B506EC6715EBF67500566A27 /* CoreGraphics.framework in Frameworks */,
|
||||
@ -72,6 +119,9 @@
|
||||
B506EC5315EBF67500566A27 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B51F8E4716519FE00033B614 /* CoreData.framework */,
|
||||
B51F8E4516519D490033B614 /* iPhoneIcon_Big.png */,
|
||||
B51F8E4316519D440033B614 /* iPhoneIcon_Small.png */,
|
||||
B5EFD391162CB18000C6E2EB /* Default-568h@2x.png */,
|
||||
B58F576D16387BE600CED51B /* NSMutableArray_Shuffling.h */,
|
||||
B506EC6815EBF67500566A27 /* Espagram */,
|
||||
@ -101,25 +151,48 @@
|
||||
B506EC6815EBF67500566A27 /* Espagram */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B54CFB741652E03600C0823D /* EspagramNewLessonViewController.h */,
|
||||
B54CFB751652E03600C0823D /* EspagramNewLessonViewController.m */,
|
||||
B5A8BB171651A3E700C1CC00 /* CoreDataTableViewController.h */,
|
||||
B5A8BB181651A3E700C1CC00 /* CoreDataTableViewController.m */,
|
||||
B506EC7115EBF67500566A27 /* EspagramAppDelegate.h */,
|
||||
B506EC7415EBF67500566A27 /* MainStoryboard.storyboard */,
|
||||
B56DE15E165426B800D85DD3 /* EspagramAddWordToLessonViewController.h */,
|
||||
B56DE15F165426B800D85DD3 /* EspagramAddWordToLessonViewController.m */,
|
||||
B56DE15A165412DF00D85DD3 /* EspagramWordsInLessonViewController.h */,
|
||||
B56DE15B165412DF00D85DD3 /* EspagramWordsInLessonViewController.m */,
|
||||
B5EC6CEB1656F1960030C27F /* Verb+Create.h */,
|
||||
B5EC6CEC1656F1960030C27F /* Verb+Create.m */,
|
||||
B51F8E3716519C850033B614 /* EspagramLessonViewController.h */,
|
||||
B51F8E3816519C850033B614 /* EspagramLessonViewController.m */,
|
||||
B512F66E164D60DB00DA031E /* EspagramMainTableViewController.h */,
|
||||
B51F8E3C16519D090033B614 /* Lesson+Create.m */,
|
||||
B5A8BB1A1652C39600C1CC00 /* Lesson+Create.h */,
|
||||
B512F66F164D60DB00DA031E /* EspagramMainTableViewController.m */,
|
||||
B512F656164D1A0C00DA031E /* EspagramConjugationTableViewController.h */,
|
||||
B512F657164D1A0C00DA031E /* EspagramConjugationTableViewController.m */,
|
||||
B512F639164BEC6000DA031E /* EspagramTestViewController.h */,
|
||||
B512F63A164BEC6000DA031E /* EspagramTestViewController.m */,
|
||||
B512F648164C2A2700DA031E /* Tense.h */,
|
||||
B512F649164C2A2700DA031E /* Tense.m */,
|
||||
B506EC7215EBF67500566A27 /* EspagramAppDelegate.m */,
|
||||
B5EFD38A162CA69F00C6E2EB /* GrammarTestViewController.h */,
|
||||
B5EFD38B162CA69F00C6E2EB /* GrammarTestViewController.m */,
|
||||
B506ECA315EE898700566A27 /* SpanishConjugator.h */,
|
||||
B506ECA415EE898700566A27 /* SpanishConjugator.m */,
|
||||
B58F57661635D27E00CED51B /* Conjugator.h */,
|
||||
B506EC7715EBF67500566A27 /* EspagramViewController.h */,
|
||||
B506EC7815EBF67500566A27 /* EspagramViewController.m */,
|
||||
B506EC6915EBF67500566A27 /* Supporting Files */,
|
||||
B51F8E1F164FF8930033B614 /* Tense.h */,
|
||||
B51F8E20164FF8930033B614 /* Tense.m */,
|
||||
B51F8E22165199F80033B614 /* Espagram.xcdatamodeld */,
|
||||
B54CFB681652D43900C0823D /* Verb.h */,
|
||||
B54CFB691652D43900C0823D /* Verb.m */,
|
||||
B54CFB6B1652D43900C0823D /* Lesson.h */,
|
||||
B54CFB6C1652D43900C0823D /* Lesson.m */,
|
||||
B56DE1611654382500D85DD3 /* Lesson+Conjugator.h */,
|
||||
B56DE1621654382500D85DD3 /* Lesson+Conjugator.m */,
|
||||
B56DE1671655774D00D85DD3 /* Lesson+Test.h */,
|
||||
B56DE1681655774D00D85DD3 /* Lesson+Test.m */,
|
||||
B56DE1641655769300D85DD3 /* TestableVerb.h */,
|
||||
B56DE1651655769300D85DD3 /* TestableVerb.m */,
|
||||
);
|
||||
path = Espagram;
|
||||
sourceTree = "<group>";
|
||||
@ -127,6 +200,7 @@
|
||||
B506EC6915EBF67500566A27 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
B5B3F92F165972EF00E26A40 /* Localizable.strings */,
|
||||
B506EC6A15EBF67500566A27 /* Espagram-Info.plist */,
|
||||
B506EC6B15EBF67500566A27 /* InfoPlist.strings */,
|
||||
B506EC6E15EBF67500566A27 /* main.m */,
|
||||
@ -162,7 +236,7 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
CLASSPREFIX = Espagram;
|
||||
LastUpgradeCheck = 0440;
|
||||
LastUpgradeCheck = 0450;
|
||||
ORGANIZATIONNAME = "Abel Fokkinga";
|
||||
};
|
||||
buildConfigurationList = B506EC5815EBF67500566A27 /* Build configuration list for PBXProject "Espagram" */;
|
||||
@ -171,6 +245,9 @@
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
nl,
|
||||
es,
|
||||
pt,
|
||||
);
|
||||
mainGroup = B506EC5315EBF67500566A27;
|
||||
productRefGroup = B506EC5F15EBF67500566A27 /* Products */;
|
||||
@ -190,6 +267,9 @@
|
||||
B506EC6D15EBF67500566A27 /* InfoPlist.strings in Resources */,
|
||||
B506EC7615EBF67500566A27 /* MainStoryboard.storyboard in Resources */,
|
||||
B5EFD392162CB18000C6E2EB /* Default-568h@2x.png in Resources */,
|
||||
B51F8E4416519D440033B614 /* iPhoneIcon_Small.png in Resources */,
|
||||
B51F8E4616519D490033B614 /* iPhoneIcon_Big.png in Resources */,
|
||||
B5B3F92D165972EF00E26A40 /* Localizable.strings in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -204,11 +284,23 @@
|
||||
B506EC7315EBF67500566A27 /* EspagramAppDelegate.m in Sources */,
|
||||
B506EC7915EBF67500566A27 /* EspagramViewController.m in Sources */,
|
||||
B506ECA515EE898700566A27 /* SpanishConjugator.m in Sources */,
|
||||
B5EFD38C162CA69F00C6E2EB /* GrammarTestViewController.m in Sources */,
|
||||
B512F63B164BEC6000DA031E /* EspagramTestViewController.m in Sources */,
|
||||
B512F64A164C2A2700DA031E /* Tense.m in Sources */,
|
||||
B512F658164D1A0C00DA031E /* EspagramConjugationTableViewController.m in Sources */,
|
||||
B512F670164D60DB00DA031E /* EspagramMainTableViewController.m in Sources */,
|
||||
B51F8E21164FF8930033B614 /* Tense.m in Sources */,
|
||||
B51F8E24165199F80033B614 /* Espagram.xcdatamodeld in Sources */,
|
||||
B51F8E3916519C850033B614 /* EspagramLessonViewController.m in Sources */,
|
||||
B5A8BB191651A64300C1CC00 /* CoreDataTableViewController.m in Sources */,
|
||||
B54CFB611652D2A700C0823D /* Lesson+Create.m in Sources */,
|
||||
B54CFB6A1652D43900C0823D /* Verb.m in Sources */,
|
||||
B54CFB6D1652D43900C0823D /* Lesson.m in Sources */,
|
||||
B54CFB761652E03600C0823D /* EspagramNewLessonViewController.m in Sources */,
|
||||
B56DE15C165412DF00D85DD3 /* EspagramWordsInLessonViewController.m in Sources */,
|
||||
B56DE160165426B800D85DD3 /* EspagramAddWordToLessonViewController.m in Sources */,
|
||||
B56DE1631654382500D85DD3 /* Lesson+Conjugator.m in Sources */,
|
||||
B56DE1661655769300D85DD3 /* TestableVerb.m in Sources */,
|
||||
B56DE1691655774E00D85DD3 /* Lesson+Test.m in Sources */,
|
||||
B5EC6CED1656F1960030C27F /* Verb+Create.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@ -231,6 +323,17 @@
|
||||
name = MainStoryboard.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
B5B3F92F165972EF00E26A40 /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
B5B3F92E165972EF00E26A40 /* nl */,
|
||||
B5B3F930165972F600E26A40 /* en */,
|
||||
B5B3F931165AC79200E26A40 /* es */,
|
||||
B5B3F932165AD45400E26A40 /* pt */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
@ -256,7 +359,7 @@
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
SDKROOT = iphoneos;
|
||||
};
|
||||
name = Debug;
|
||||
@ -276,7 +379,7 @@
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 5.1;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 6.0;
|
||||
OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
|
||||
SDKROOT = iphoneos;
|
||||
VALIDATE_PRODUCT = YES;
|
||||
@ -331,6 +434,19 @@
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
|
||||
/* Begin XCVersionGroup section */
|
||||
B51F8E22165199F80033B614 /* Espagram.xcdatamodeld */ = {
|
||||
isa = XCVersionGroup;
|
||||
children = (
|
||||
B51F8E23165199F80033B614 /* Espagram.xcdatamodel */,
|
||||
);
|
||||
currentVersion = B51F8E23165199F80033B614 /* Espagram.xcdatamodel */;
|
||||
path = Espagram.xcdatamodeld;
|
||||
sourceTree = "<group>";
|
||||
versionGroupType = wrapper.xcdatamodel;
|
||||
};
|
||||
/* End XCVersionGroup section */
|
||||
};
|
||||
rootObject = B506EC5515EBF67500566A27 /* Project object */;
|
||||
}
|
||||
|
||||
Binary file not shown.
@ -2,9 +2,21 @@
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildLocationStyle</key>
|
||||
<string>UseAppPreferences</string>
|
||||
<key>CustomBuildLocationType</key>
|
||||
<string>RelativeToDerivedData</string>
|
||||
<key>DerivedDataLocationStyle</key>
|
||||
<string>Default</string>
|
||||
<key>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
|
||||
<true/>
|
||||
<key>IssueFilterStyle</key>
|
||||
<string>ShowActiveSchemeOnly</string>
|
||||
<key>LiveSourceIssuesEnabled</key>
|
||||
<true/>
|
||||
<key>SnapshotAutomaticallyBeforeSignificantChanges</key>
|
||||
<true/>
|
||||
<key>SnapshotLocationStyle</key>
|
||||
<string>Default</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@ -16,5 +16,523 @@
|
||||
landmarkName = "-getSimplePresentStemVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "837"
|
||||
endingLineNumber = "837"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "875"
|
||||
endingLineNumber = "875"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375395627.450944"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1145"
|
||||
endingLineNumber = "1145"
|
||||
landmarkName = "-conjugateConditionalVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/Tense.m"
|
||||
timestampString = "374447481.379116"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "6"
|
||||
endingLineNumber = "6">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "891"
|
||||
endingLineNumber = "891"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "894"
|
||||
endingLineNumber = "894"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "828"
|
||||
endingLineNumber = "828"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "924"
|
||||
endingLineNumber = "924"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/Lesson+Test.m"
|
||||
timestampString = "374706848.212213"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "22"
|
||||
endingLineNumber = "22"
|
||||
landmarkName = "-testableVerbs"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375398858.749631"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "3098"
|
||||
endingLineNumber = "3098"
|
||||
landmarkName = "-getTestConjugationsForVerb:inPerson:andTense:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1351"
|
||||
endingLineNumber = "1351"
|
||||
landmarkName = "-generateFalseConjugationsSimplePresentVerb:inPerson:withCorrectAnswer:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "125"
|
||||
endingLineNumber = "125"
|
||||
landmarkName = "-nextVerb"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1339"
|
||||
endingLineNumber = "1339"
|
||||
landmarkName = "-popLastFromArray:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "163"
|
||||
endingLineNumber = "163"
|
||||
landmarkName = "-nextVerb"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "58"
|
||||
endingLineNumber = "58"
|
||||
landmarkName = "-answered:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "107"
|
||||
endingLineNumber = "107"
|
||||
landmarkName = "-setUIButtonTitle:withText:inColour:forState:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "91"
|
||||
endingLineNumber = "91"
|
||||
landmarkName = "-setAnswerButton:withAnswer:andCorrect:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "101"
|
||||
endingLineNumber = "101"
|
||||
landmarkName = "-setUIButtonTitle:withText:inColour:forState:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375398858.749631"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "3047"
|
||||
endingLineNumber = "3047"
|
||||
landmarkName = "-generateFalseConjugationsPerfectVerb:withHaberConjugation:withCorrectAnswer:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/main.m"
|
||||
timestampString = "374792823.149512"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "16"
|
||||
endingLineNumber = "16"
|
||||
landmarkName = "main()"
|
||||
landmarkType = "7">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "2992"
|
||||
endingLineNumber = "2992"
|
||||
landmarkName = "-generateFalseConjugationsPerfectVerb:withHaberConjugation:withCorrectAnswer:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/main.m"
|
||||
timestampString = "374792884.824649"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "17"
|
||||
endingLineNumber = "17"
|
||||
landmarkName = "main()"
|
||||
landmarkType = "7">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880419.819963"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "149"
|
||||
endingLineNumber = "149"
|
||||
landmarkName = "-nextVerb"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375395627.450944"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1151"
|
||||
endingLineNumber = "1151"
|
||||
landmarkName = "-conjugatePerfectVerb:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/Verb+Create.m"
|
||||
timestampString = "374879911.792099"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "19"
|
||||
endingLineNumber = "19"
|
||||
landmarkName = "+addVerb:andMeaning:toLesson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375398858.749631"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "3103"
|
||||
endingLineNumber = "3103"
|
||||
landmarkName = "-getTestConjugationsForVerb:inPerson:andTense:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1275"
|
||||
endingLineNumber = "1275"
|
||||
landmarkName = "-conjugateVerb:inPerson:andTense:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/Verb+Create.m"
|
||||
timestampString = "374879911.792099"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "28"
|
||||
endingLineNumber = "28"
|
||||
landmarkName = "+addVerb:andMeaning:toLesson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1331"
|
||||
endingLineNumber = "1331"
|
||||
landmarkName = "-addToAnswers:withCorrectAnswer:conjugation:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1332"
|
||||
endingLineNumber = "1332"
|
||||
landmarkName = "-addToAnswers:withCorrectAnswer:conjugation:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375397242.73459"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1330"
|
||||
endingLineNumber = "1330"
|
||||
landmarkName = "-addToAnswers:withCorrectAnswer:conjugation:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392727.686017"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "830"
|
||||
endingLineNumber = "830"
|
||||
landmarkName = "-conjugateSimplePastVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375389327.30898"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "186"
|
||||
endingLineNumber = "186"
|
||||
landmarkName = "-getSimplePresentStemVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramTestViewController.m"
|
||||
timestampString = "374880329.187761"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "25"
|
||||
endingLineNumber = "25"
|
||||
landmarkName = "verbMeaningLable"
|
||||
landmarkType = "19">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375389327.30898"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "316"
|
||||
endingLineNumber = "316"
|
||||
landmarkName = "-conjugateSimplePresentVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392782.173009"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "426"
|
||||
endingLineNumber = "426"
|
||||
landmarkName = "-conjugatePresentSubjunctiveVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375392826.97526"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "404"
|
||||
endingLineNumber = "404"
|
||||
landmarkName = "-conjugatePresentSubjunctiveVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375395949.637296"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1058"
|
||||
endingLineNumber = "1058"
|
||||
landmarkName = "-conjugateImperfectSubjunctiveVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/SpanishConjugator.m"
|
||||
timestampString = "375395980.356477"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "1046"
|
||||
endingLineNumber = "1046"
|
||||
landmarkName = "-conjugateImperfectSubjunctiveVerb:inPerson:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
<FileBreakpoint
|
||||
shouldBeEnabled = "No"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Espagram/EspagramWordsInLessonViewController.m"
|
||||
timestampString = "375399761.902352"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "108"
|
||||
endingLineNumber = "108"
|
||||
landmarkName = "-tableView:commitEditingStyle:forRowAtIndexPath:"
|
||||
landmarkType = "5">
|
||||
</FileBreakpoint>
|
||||
</FileBreakpoints>
|
||||
</Bucket>
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "0440"
|
||||
LastUpgradeVersion = "0450"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
||||
@ -1,21 +0,0 @@
|
||||
//
|
||||
// ConjugatedTense.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class Conjugations, Tenses, Verbs;
|
||||
|
||||
@interface ConjugatedTense : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSNumber * regularConjugation;
|
||||
@property (nonatomic, retain) Verbs *verb;
|
||||
@property (nonatomic, retain) Tenses *tense;
|
||||
@property (nonatomic, retain) Conjugations *irregularConjugation;
|
||||
|
||||
@end
|
||||
@ -1,22 +0,0 @@
|
||||
//
|
||||
// ConjugatedTense.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ConjugatedTense.h"
|
||||
#import "Conjugations.h"
|
||||
#import "Tenses.h"
|
||||
#import "Verbs.h"
|
||||
|
||||
|
||||
@implementation ConjugatedTense
|
||||
|
||||
@dynamic regularConjugation;
|
||||
@dynamic verb;
|
||||
@dynamic tense;
|
||||
@dynamic irregularConjugation;
|
||||
|
||||
@end
|
||||
@ -1,13 +0,0 @@
|
||||
//
|
||||
// ConjugatedVerbTableView.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/8/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface ConjugatedVerbTableView : UITableView
|
||||
|
||||
@end
|
||||
@ -1,31 +0,0 @@
|
||||
//
|
||||
// ConjugatedVerbTableView.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/8/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ConjugatedVerbTableView.h"
|
||||
|
||||
@implementation ConjugatedVerbTableView
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
// Initialization code
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
// Only override drawRect: if you perform custom drawing.
|
||||
// An empty implementation adversely affects performance during animation.
|
||||
- (void)drawRect:(CGRect)rect
|
||||
{
|
||||
// Drawing code
|
||||
}
|
||||
*/
|
||||
|
||||
@end
|
||||
@ -1,20 +0,0 @@
|
||||
//
|
||||
// Conjugations.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class Persons;
|
||||
|
||||
@interface Conjugations : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSString * root;
|
||||
@property (nonatomic, retain) NSString * exit;
|
||||
@property (nonatomic, retain) Persons *conjugationPerson;
|
||||
|
||||
@end
|
||||
@ -1,19 +0,0 @@
|
||||
//
|
||||
// Conjugations.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Conjugations.h"
|
||||
#import "Persons.h"
|
||||
|
||||
|
||||
@implementation Conjugations
|
||||
|
||||
@dynamic root;
|
||||
@dynamic exit;
|
||||
@dynamic conjugationPerson;
|
||||
|
||||
@end
|
||||
@ -13,10 +13,13 @@
|
||||
|
||||
|
||||
- (NSDictionary *) persons;
|
||||
- (NSDictionary *) reflexivePersons;
|
||||
- (NSArray *) personsKeys;
|
||||
|
||||
- (NSString *) conjugateVerb:(NSString *) verb inPerson:(NSString *) person andTense:(Tense *) tense;
|
||||
|
||||
- (NSMutableArray *) getTestConjugationsForVerb:(NSString *) verb inPerson:(NSString *) person andTense:(Tense *) tense;
|
||||
|
||||
- (NSString *) description;
|
||||
|
||||
@end
|
||||
|
||||
53
Espagram/CoreDataTableViewController.h
Normal file
53
Espagram/CoreDataTableViewController.h
Normal file
@ -0,0 +1,53 @@
|
||||
//
|
||||
// CoreDataTableViewController.h
|
||||
//
|
||||
// Created for Stanford CS193p Fall 2011.
|
||||
// Copyright 2011 Stanford University. All rights reserved.
|
||||
//
|
||||
// This class mostly just copies the code from NSFetchedResultsController's documentation page
|
||||
// into a subclass of UITableViewController.
|
||||
//
|
||||
// Just subclass this and set the fetchedResultsController.
|
||||
// The only UITableViewDataSource method you'll HAVE to implement is tableView:cellForRowAtIndexPath:.
|
||||
// And you can use the NSFetchedResultsController method objectAtIndexPath: to do it.
|
||||
//
|
||||
// Remember that once you create an NSFetchedResultsController, you CANNOT modify its @propertys.
|
||||
// If you want new fetch parameters (predicate, sorting, etc.),
|
||||
// create a NEW NSFetchedResultsController and set this class's fetchedResultsController @property again.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@interface CoreDataTableViewController : UITableViewController <NSFetchedResultsControllerDelegate>
|
||||
|
||||
// The controller (this class fetches nothing if this is not set).
|
||||
@property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController;
|
||||
|
||||
// Causes the fetchedResultsController to refetch the data.
|
||||
// You almost certainly never need to call this.
|
||||
// The NSFetchedResultsController class observes the context
|
||||
// (so if the objects in the context change, you do not need to call performFetch
|
||||
// since the NSFetchedResultsController will notice and update the table automatically).
|
||||
// This will also automatically be called if you change the fetchedResultsController @property.
|
||||
- (void)performFetch;
|
||||
|
||||
// Turn this on before making any changes in the managed object context that
|
||||
// are a one-for-one result of the user manipulating rows directly in the table view.
|
||||
// Such changes cause the context to report them (after a brief delay),
|
||||
// and normally our fetchedResultsController would then try to update the table,
|
||||
// but that is unnecessary because the changes were made in the table already (by the user)
|
||||
// so the fetchedResultsController has nothing to do and needs to ignore those reports.
|
||||
// Turn this back off after the user has finished the change.
|
||||
// Note that the effect of setting this to NO actually gets delayed slightly
|
||||
// so as to ignore previously-posted, but not-yet-processed context-changed notifications,
|
||||
// therefore it is fine to set this to YES at the beginning of, e.g., tableView:moveRowAtIndexPath:toIndexPath:,
|
||||
// and then set it back to NO at the end of your implementation of that method.
|
||||
// It is not necessary (in fact, not desirable) to set this during row deletion or insertion
|
||||
// (but definitely for row moves).
|
||||
@property (nonatomic) BOOL suspendAutomaticTrackingOfChangesInManagedObjectContext;
|
||||
|
||||
// Set to YES to get some debugging output in the console.
|
||||
@property BOOL debug;
|
||||
|
||||
@end
|
||||
175
Espagram/CoreDataTableViewController.m
Normal file
175
Espagram/CoreDataTableViewController.m
Normal file
@ -0,0 +1,175 @@
|
||||
//
|
||||
// CoreDataTableViewController.m
|
||||
//
|
||||
// Created for Stanford CS193p Fall 2011.
|
||||
// Copyright 2011 Stanford University. All rights reserved.
|
||||
//
|
||||
|
||||
#import "CoreDataTableViewController.h"
|
||||
|
||||
@interface CoreDataTableViewController()
|
||||
@property (nonatomic) BOOL beganUpdates;
|
||||
@end
|
||||
|
||||
@implementation CoreDataTableViewController
|
||||
|
||||
#pragma mark - Properties
|
||||
|
||||
@synthesize fetchedResultsController = _fetchedResultsController;
|
||||
@synthesize suspendAutomaticTrackingOfChangesInManagedObjectContext = _suspendAutomaticTrackingOfChangesInManagedObjectContext;
|
||||
@synthesize debug = _debug;
|
||||
@synthesize beganUpdates = _beganUpdates;
|
||||
|
||||
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
|
||||
{
|
||||
return YES;
|
||||
}
|
||||
|
||||
#pragma mark - Fetching
|
||||
|
||||
- (void)performFetch
|
||||
{
|
||||
if (self.fetchedResultsController) {
|
||||
if (self.fetchedResultsController.fetchRequest.predicate) {
|
||||
if (self.debug) NSLog(@"[%@ %@] fetching %@ with predicate: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName, self.fetchedResultsController.fetchRequest.predicate);
|
||||
} else {
|
||||
if (self.debug) NSLog(@"[%@ %@] fetching all %@ (i.e., no predicate)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), self.fetchedResultsController.fetchRequest.entityName);
|
||||
}
|
||||
NSError *error;
|
||||
[self.fetchedResultsController performFetch:&error];
|
||||
if (error) NSLog(@"[%@ %@] %@ (%@)", NSStringFromClass([self class]), NSStringFromSelector(_cmd), [error localizedDescription], [error localizedFailureReason]);
|
||||
} else {
|
||||
if (self.debug) NSLog(@"[%@ %@] no NSFetchedResultsController (yet?)", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
|
||||
}
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
|
||||
- (void)setFetchedResultsController:(NSFetchedResultsController *)newfrc
|
||||
{
|
||||
NSFetchedResultsController *oldfrc = _fetchedResultsController;
|
||||
if (newfrc != oldfrc) {
|
||||
_fetchedResultsController = newfrc;
|
||||
newfrc.delegate = self;
|
||||
if ((!self.title || [self.title isEqualToString:oldfrc.fetchRequest.entity.name]) && (!self.navigationController || !self.navigationItem.title)) {
|
||||
self.title = newfrc.fetchRequest.entity.name;
|
||||
}
|
||||
if (newfrc) {
|
||||
if (self.debug) NSLog(@"[%@ %@] %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), oldfrc ? @"updated" : @"set");
|
||||
[self performFetch];
|
||||
} else {
|
||||
if (self.debug) NSLog(@"[%@ %@] reset to nil", NSStringFromClass([self class]), NSStringFromSelector(_cmd));
|
||||
[self.tableView reloadData];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
|
||||
{
|
||||
return [[self.fetchedResultsController sections] count];
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
||||
{
|
||||
return [[[self.fetchedResultsController sections] objectAtIndex:section] name];
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
|
||||
{
|
||||
return [self.fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
|
||||
}
|
||||
|
||||
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
|
||||
{
|
||||
return [self.fetchedResultsController sectionIndexTitles];
|
||||
}
|
||||
|
||||
#pragma mark - NSFetchedResultsControllerDelegate
|
||||
|
||||
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller
|
||||
{
|
||||
if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext) {
|
||||
[self.tableView beginUpdates];
|
||||
self.beganUpdates = YES;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)controller:(NSFetchedResultsController *)controller
|
||||
didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
|
||||
atIndex:(NSUInteger)sectionIndex
|
||||
forChangeType:(NSFetchedResultsChangeType)type
|
||||
{
|
||||
if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case NSFetchedResultsChangeInsert:
|
||||
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
|
||||
break;
|
||||
|
||||
case NSFetchedResultsChangeDelete:
|
||||
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void)controller:(NSFetchedResultsController *)controller
|
||||
didChangeObject:(id)anObject
|
||||
atIndexPath:(NSIndexPath *)indexPath
|
||||
forChangeType:(NSFetchedResultsChangeType)type
|
||||
newIndexPath:(NSIndexPath *)newIndexPath
|
||||
{
|
||||
if (!self.suspendAutomaticTrackingOfChangesInManagedObjectContext)
|
||||
{
|
||||
switch(type)
|
||||
{
|
||||
case NSFetchedResultsChangeInsert:
|
||||
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
break;
|
||||
|
||||
case NSFetchedResultsChangeDelete:
|
||||
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
break;
|
||||
|
||||
case NSFetchedResultsChangeUpdate:
|
||||
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
break;
|
||||
|
||||
case NSFetchedResultsChangeMove:
|
||||
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
|
||||
{
|
||||
if (self.beganUpdates) [self.tableView endUpdates];
|
||||
}
|
||||
|
||||
- (void)endSuspensionOfUpdatesDueToContextChanges
|
||||
{
|
||||
_suspendAutomaticTrackingOfChangesInManagedObjectContext = NO;
|
||||
}
|
||||
|
||||
- (void)setSuspendAutomaticTrackingOfChangesInManagedObjectContext:(BOOL)suspend
|
||||
{
|
||||
if (suspend) {
|
||||
_suspendAutomaticTrackingOfChangesInManagedObjectContext = YES;
|
||||
} else {
|
||||
[self performSelector:@selector(endSuspensionOfUpdatesDueToContextChanges) withObject:0 afterDelay:0];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@ -8,10 +8,27 @@
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${EXECUTABLE_NAME}</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string></string>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict>
|
||||
<key>CFBundlePrimaryIcon</key>
|
||||
<dict>
|
||||
<key>CFBundleIconFiles</key>
|
||||
<array>
|
||||
<string>iPhoneIcon_Small.png</string>
|
||||
<string>iPhoneIcon_Big.png</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.fokkinga.abel.${PRODUCT_NAME:rfc1034identifier}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>en</string>
|
||||
</array>
|
||||
<key>CFBundleName</key>
|
||||
<string>${PRODUCT_NAME}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
@ -22,8 +39,12 @@
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1.0</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string></string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Abel Fokkinga</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>MainStoryboard</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict/>
|
||||
<dict>
|
||||
<key>_XCCurrentVersionName</key>
|
||||
<string>Espagram.xcdatamodel</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
20
Espagram/Espagram.xcdatamodeld/Espagram.xcdatamodel/contents
Normal file
20
Espagram/Espagram.xcdatamodeld/Espagram.xcdatamodel/contents
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<model name="" userDefinedModelVersionIdentifier="" type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1811" systemVersion="12C60" minimumToolsVersion="Xcode 4.3" macOSVersion="Automatic" iOSVersion="Automatic">
|
||||
<entity name="Lesson" representedClassName="Lesson" syncable="YES">
|
||||
<attribute name="conjugator" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<attribute name="dateAdded" optional="YES" attributeType="Date" syncable="YES"/>
|
||||
<attribute name="subTitle" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<attribute name="tense" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<attribute name="title" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<relationship name="verbs" optional="YES" toMany="YES" deletionRule="Cascade" destinationEntity="Verb" inverseName="lesson" inverseEntity="Verb" syncable="YES"/>
|
||||
</entity>
|
||||
<entity name="Verb" representedClassName="Verb" syncable="YES">
|
||||
<attribute name="meaning" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<attribute name="verb" optional="YES" attributeType="String" syncable="YES"/>
|
||||
<relationship name="lesson" optional="YES" minCount="1" maxCount="1" deletionRule="Nullify" destinationEntity="Lesson" inverseName="verbs" inverseEntity="Lesson" syncable="YES"/>
|
||||
</entity>
|
||||
<elements>
|
||||
<element name="Lesson" positionX="160" positionY="192" width="128" height="135"/>
|
||||
<element name="Verb" positionX="403" positionY="198" width="128" height="88"/>
|
||||
</elements>
|
||||
</model>
|
||||
@ -1,21 +0,0 @@
|
||||
//
|
||||
// ConjugatedTense.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class Conjugations, Tenses, Verbs;
|
||||
|
||||
@interface ConjugatedTense : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSNumber * regularConjugation;
|
||||
@property (nonatomic, retain) Verbs *verb;
|
||||
@property (nonatomic, retain) Tenses *tense;
|
||||
@property (nonatomic, retain) Conjugations *irregularConjugation;
|
||||
|
||||
@end
|
||||
@ -1,22 +0,0 @@
|
||||
//
|
||||
// ConjugatedTense.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ConjugatedTense.h"
|
||||
#import "Conjugations.h"
|
||||
#import "Tenses.h"
|
||||
#import "Verbs.h"
|
||||
|
||||
|
||||
@implementation ConjugatedTense
|
||||
|
||||
@dynamic regularConjugation;
|
||||
@dynamic verb;
|
||||
@dynamic tense;
|
||||
@dynamic irregularConjugation;
|
||||
|
||||
@end
|
||||
@ -1,13 +0,0 @@
|
||||
//
|
||||
// ConjugatedVerbTableView.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/8/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@interface ConjugatedVerbTableView : UITableView
|
||||
|
||||
@end
|
||||
@ -1,31 +0,0 @@
|
||||
//
|
||||
// ConjugatedVerbTableView.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/8/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ConjugatedVerbTableView.h"
|
||||
|
||||
@implementation ConjugatedVerbTableView
|
||||
|
||||
- (id)initWithFrame:(CGRect)frame
|
||||
{
|
||||
self = [super initWithFrame:frame];
|
||||
if (self) {
|
||||
// Initialization code
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
// Only override drawRect: if you perform custom drawing.
|
||||
// An empty implementation adversely affects performance during animation.
|
||||
- (void)drawRect:(CGRect)rect
|
||||
{
|
||||
// Drawing code
|
||||
}
|
||||
*/
|
||||
|
||||
@end
|
||||
@ -1,20 +0,0 @@
|
||||
//
|
||||
// Conjugations.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class Persons;
|
||||
|
||||
@interface Conjugations : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSString * root;
|
||||
@property (nonatomic, retain) NSString * exit;
|
||||
@property (nonatomic, retain) Persons *conjugationPerson;
|
||||
|
||||
@end
|
||||
36
Espagram/EspagramAddWordToLessonViewController.h
Normal file
36
Espagram/EspagramAddWordToLessonViewController.h
Normal file
@ -0,0 +1,36 @@
|
||||
//
|
||||
// EspagramAddWordToLessonViewController.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/14/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class EspagramAddWordToLessonViewController;
|
||||
@protocol EspagramAddWordToLessonViewControllerDelegate
|
||||
|
||||
- (void) addWord:(NSString *)word withMeaning:(NSString *)meaning;
|
||||
|
||||
- (void) cancelAddingWord;
|
||||
|
||||
@end
|
||||
|
||||
@interface EspagramAddWordToLessonViewController : UIViewController
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UILabel *wordLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UILabel *meaningLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *addButton;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *cancelButton;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *wordInputText;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *meaningInputText;
|
||||
|
||||
@property (nonatomic,strong) id <EspagramAddWordToLessonViewControllerDelegate> dataSource;
|
||||
|
||||
@end
|
||||
52
Espagram/EspagramAddWordToLessonViewController.m
Normal file
52
Espagram/EspagramAddWordToLessonViewController.m
Normal file
@ -0,0 +1,52 @@
|
||||
//
|
||||
// EspagramAddWordToLessonViewController.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/14/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EspagramAddWordToLessonViewController.h"
|
||||
|
||||
@interface EspagramAddWordToLessonViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation EspagramAddWordToLessonViewController
|
||||
|
||||
@synthesize dataSource = _dataSource;
|
||||
@synthesize wordLabel = _wordLabel;
|
||||
@synthesize meaningLabel = _meaningLabel;
|
||||
@synthesize wordInputText = _wordInputText;
|
||||
@synthesize meaningInputText = _meaningInputText;
|
||||
@synthesize addButton = _addButton;
|
||||
@synthesize cancelButton = _cancelButton;
|
||||
|
||||
- (IBAction)editingDidEnd {
|
||||
[self resignFirstResponder];
|
||||
}
|
||||
|
||||
|
||||
- (IBAction)addButtonPressed:(id)sender {
|
||||
[self.dataSource addWord: self.wordInputText.text withMeaning:self.meaningInputText.text];
|
||||
}
|
||||
|
||||
- (IBAction)cancelButtonPressed:(id)sender {
|
||||
[self.dataSource cancelAddingWord];
|
||||
}
|
||||
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
self.wordLabel.text = NSLocalizedString(@"New verb", @"Adding a new verb to a lesson");
|
||||
self.meaningLabel.text = NSLocalizedString(@"Meaning", @"Adding the meaning of a new verb being added to a lesson");
|
||||
|
||||
[self.addButton setTitle:NSLocalizedString(@"Add Verb", @"Add button when adding a verb to a lesson") forState:UIControlStateNormal];
|
||||
|
||||
[self.cancelButton setTitle:NSLocalizedString(@"Cancel Verb",@"Cancel button to cancel adding a verb to a lesson") forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
@ -43,4 +43,6 @@
|
||||
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
@ -7,24 +7,12 @@
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "Conjugator.h"
|
||||
|
||||
@class EspagramConjugationTableViewController;
|
||||
|
||||
@protocol EspagramConjugationTableView
|
||||
|
||||
@property (strong, nonatomic) id<Conjugator> conjugator;
|
||||
@property (strong, nonatomic) Tense *tense;
|
||||
@property (strong, nonatomic) NSString* verb;
|
||||
|
||||
@end
|
||||
#import "SpanishConjugator.h"
|
||||
#import "Lesson+Conjugator.h"
|
||||
#import "Verb.h"
|
||||
|
||||
@interface EspagramConjugationTableViewController : UITableViewController
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *verbInput;
|
||||
|
||||
@property (nonatomic, strong) id <EspagramConjugationTableView> dataSource;
|
||||
|
||||
- (void) reloadData;
|
||||
@property (weak, nonatomic) IBOutlet Verb *verb;
|
||||
|
||||
@end
|
||||
|
||||
@ -14,40 +14,8 @@
|
||||
|
||||
@implementation EspagramConjugationTableViewController
|
||||
|
||||
@synthesize dataSource = _dataSource;
|
||||
@synthesize verb = _verb;
|
||||
|
||||
- (void) dataSource:(id <EspagramConjugationTableView>) dataSource {
|
||||
_dataSource = dataSource;
|
||||
[self reloadData];
|
||||
}
|
||||
|
||||
- (IBAction)verbEntered:(id)sender {
|
||||
[self.view resignFirstResponder];
|
||||
}
|
||||
|
||||
- (id)initWithStyle:(UITableViewStyle)style
|
||||
{
|
||||
self = [super initWithStyle:style];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) reloadData {
|
||||
if (_dataSource) {
|
||||
NSLog(@"language %@", [self.dataSource.conjugator description]);
|
||||
NSLog(@"persons %d", self.dataSource.conjugator.persons.count);
|
||||
[self.tableView reloadData];
|
||||
} else NSLog(@"Datasource is nil");
|
||||
}
|
||||
|
||||
|
||||
- (void)didReceiveMemoryWarning
|
||||
{
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
#pragma mark - Table view data source
|
||||
|
||||
@ -55,12 +23,11 @@
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
// Return the number of rows in the section.
|
||||
return [[[self.dataSource conjugator] persons] count];
|
||||
return [[[self.verb.lesson getConjugationEngine] persons] count];
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
||||
@ -69,7 +36,7 @@
|
||||
switch (section)
|
||||
{
|
||||
case 0:
|
||||
sectionName = self.dataSource.verb;
|
||||
sectionName = self.verb.verb;
|
||||
break;
|
||||
default:
|
||||
sectionName = @"";
|
||||
@ -88,20 +55,20 @@
|
||||
}
|
||||
|
||||
|
||||
NSString * person = [[self.dataSource.conjugator personsKeys] objectAtIndex:indexPath.row];
|
||||
cell.textLabel.text = [self.dataSource.conjugator.persons objectForKey:person];
|
||||
cell.detailTextLabel.text = [self.dataSource.conjugator conjugateVerb:self.dataSource.verb inPerson:person andTense:self.dataSource.tense];
|
||||
NSString * person = [[[self.verb.lesson getConjugationEngine] personsKeys] objectAtIndex:indexPath.row];
|
||||
cell.textLabel.text = [[[self.verb.lesson getConjugationEngine] persons] objectForKey:person];
|
||||
cell.detailTextLabel.text = [[self.verb.lesson getConjugationEngine] conjugateVerb:self.verb.verb inPerson:person andTense:[self.verb.lesson getTenseAsTense]];
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
- (void) viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[self.tableView reloadData];
|
||||
[super viewDidAppear:animated];
|
||||
self.title = [[self.verb.lesson getTenseAsTense] getTenseInLanguage:self.verb.lesson.conjugator];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma mark - Table view delegate
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
|
||||
24
Espagram/EspagramLessonViewController.h
Normal file
24
Espagram/EspagramLessonViewController.h
Normal file
@ -0,0 +1,24 @@
|
||||
//
|
||||
// EspagramLessonViewController.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/12/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "CoreDataTableViewController.h"
|
||||
#import "Conjugator.h"
|
||||
#import "EspagramNewLessonViewController.h"
|
||||
#import "Tense.h"
|
||||
|
||||
|
||||
@interface EspagramLessonViewController : CoreDataTableViewController <EspagramNewLessonDelegate>
|
||||
|
||||
@property (nonatomic, strong) UIManagedDocument * lessonsDatabase;
|
||||
@property (nonatomic, strong)
|
||||
id <Conjugator> conjugator;
|
||||
@property (nonatomic, strong)
|
||||
Tense * tense;
|
||||
|
||||
@end
|
||||
225
Espagram/EspagramLessonViewController.m
Normal file
225
Espagram/EspagramLessonViewController.m
Normal file
@ -0,0 +1,225 @@
|
||||
//
|
||||
// EspagramLessonViewController.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/12/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EspagramLessonViewController.h"
|
||||
#import "Lesson+Create.h"
|
||||
#import "Lesson+Conjugator.h"
|
||||
#import "EspagramTestViewController.h"
|
||||
|
||||
|
||||
@interface EspagramLessonViewController ()
|
||||
@end
|
||||
|
||||
@implementation EspagramLessonViewController
|
||||
|
||||
@synthesize lessonsDatabase = _lessonsDatabase;
|
||||
@synthesize conjugator = _conjugator;
|
||||
@synthesize tense = _tense;
|
||||
|
||||
|
||||
- (IBAction)addLessonButtonPressed:(id)sender {
|
||||
[self performSegueWithIdentifier:@"Add new Lesson" sender:self];
|
||||
}
|
||||
|
||||
- (void) addLesson:(NSString*)title withDescription:(NSString*) subTitle {
|
||||
|
||||
NSLog(@"Need to dismiss modal view controller");
|
||||
[[self presentedViewController] dismissViewControllerAnimated:TRUE completion:^{
|
||||
NSLog(@"View controller dismissed");
|
||||
}];
|
||||
|
||||
NSLog(@"database %@, context %@", self.lessonsDatabase,[self.lessonsDatabase managedObjectContext]);
|
||||
|
||||
[Lesson addLessonWithTitle:title andSubTitle:subTitle inTense:self.tense conjugatedBy:self.conjugator inManagedObjectContext:[self.lessonsDatabase managedObjectContext]];
|
||||
|
||||
[self.lessonsDatabase saveToURL:self.lessonsDatabase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL];
|
||||
}
|
||||
|
||||
- (void) cancelLesson{
|
||||
NSLog(@"Cancel pressed, need to dismiss modal view controller");
|
||||
[[self presentedViewController] dismissViewControllerAnimated:TRUE completion:^{
|
||||
NSLog(@"View controller dismissed");
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#pragma mark - View lifecycle
|
||||
|
||||
|
||||
- (void) setupFetchedResultsController{
|
||||
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Lesson"];
|
||||
|
||||
self.debug = TRUE;
|
||||
|
||||
// Where clause
|
||||
request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSPredicate predicateWithFormat:@"tense = %@", self.tense.tense], [NSPredicate predicateWithFormat:@"conjugator = %@", [self.conjugator description]],nil]];
|
||||
|
||||
|
||||
request.sortDescriptors = [[NSArray alloc] initWithObjects:[[NSSortDescriptor alloc] initWithKey:@"title" ascending:TRUE], nil];
|
||||
|
||||
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:self.lessonsDatabase.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
|
||||
}
|
||||
|
||||
- (void) createDocument
|
||||
{
|
||||
[self.lessonsDatabase saveToURL:self.lessonsDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL succes){
|
||||
NSLog(@"Created lessons database");
|
||||
}];
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (void) useDocument
|
||||
{
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:[self.lessonsDatabase.fileURL path]]) {
|
||||
[self createDocument];
|
||||
[self fetchedResultsController];
|
||||
} else if (self.lessonsDatabase.documentState == UIDocumentStateClosed){
|
||||
[self.lessonsDatabase openWithCompletionHandler:^(BOOL succes){
|
||||
NSLog(@"Opened lessons database");
|
||||
[self setupFetchedResultsController];
|
||||
}];
|
||||
} else if (self.lessonsDatabase.documentState == UIDocumentStateNormal) {
|
||||
[self setupFetchedResultsController];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (void) setLessonsDatabase:(UIManagedDocument *)lessonsDatabase{
|
||||
if ( _lessonsDatabase != lessonsDatabase ) {
|
||||
_lessonsDatabase = lessonsDatabase;
|
||||
[self useDocument];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated{
|
||||
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
self.title = NSLocalizedString(@"Lessons title",@"Lessons title");
|
||||
|
||||
if (!self.lessonsDatabase) { // We'll create a default database if none is set
|
||||
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDirectory] lastObject];
|
||||
url = [url URLByAppendingPathComponent:@"Default Espagram database"];
|
||||
|
||||
UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url];
|
||||
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
|
||||
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
|
||||
doc.persistentStoreOptions = options;
|
||||
self.lessonsDatabase = doc;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (void)viewDidUnload {
|
||||
|
||||
[super viewDidUnload];
|
||||
|
||||
[self.lessonsDatabase closeWithCompletionHandler:^(BOOL success) {
|
||||
NSLog(@"Database closed");
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
static NSString *CellIdentifier = @"Lesson cell";
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
|
||||
|
||||
Lesson *lesson = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||
NSLog(@"Showing lesson: %@", lesson.title);
|
||||
cell.textLabel.text = lesson.title;
|
||||
cell.detailTextLabel.text = lesson.subTitle;
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
|
||||
{
|
||||
NSIndexPath * indexPath = [self.tableView indexPathForCell:sender];
|
||||
Lesson * lesson = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||
|
||||
if ( [segue.identifier isEqualToString:@"Testing"]){
|
||||
NSLog(@"Preparing for segue Testing");
|
||||
|
||||
if ([segue.destinationViewController respondsToSelector:@selector(setConjugator:)]) {
|
||||
[segue.destinationViewController setConjugator:self.conjugator];
|
||||
}
|
||||
|
||||
|
||||
if ([segue.destinationViewController respondsToSelector:@selector(setLesson:)]) {
|
||||
[segue.destinationViewController setLesson:lesson];
|
||||
[segue.destinationViewController setTitle:lesson.title];
|
||||
}
|
||||
}
|
||||
|
||||
if ( [segue.identifier isEqualToString:@"Add new Lesson"]){
|
||||
NSLog(@"Preparing for segue Add new Lesson");
|
||||
[segue.destinationViewController setDataSource:self];
|
||||
}
|
||||
|
||||
if ( [segue.identifier isEqualToString:@"Show Words In Lesson"]){
|
||||
NSLog(@"Preparing for segue Show Words In Lesson");
|
||||
if ([segue.destinationViewController respondsToSelector:@selector(setLesson:)]) {
|
||||
[segue.destinationViewController setLesson:lesson];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
Lesson * lesson = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||
|
||||
if ( [lesson.verbs count] == 0) {
|
||||
// Lesson contains no words yet.. so go to the WordsInLessonView to add them
|
||||
// sender is the selected cell
|
||||
[self performSegueWithIdentifier:@"Show Words In Lesson" sender:[self.tableView cellForRowAtIndexPath:indexPath]];
|
||||
} else {
|
||||
[self performSegueWithIdentifier:@"Testing" sender:[self.tableView cellForRowAtIndexPath:indexPath]];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
[self performSegueWithIdentifier:@"Show Words In Lesson" sender:[self.tableView cellForRowAtIndexPath:indexPath]];
|
||||
}
|
||||
|
||||
// Override to support conditional editing of the table view.
|
||||
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
// Return NO if you do not want the specified item to be editable.
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Override to support editing the table view.
|
||||
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
||||
// Delete the row from the data source
|
||||
//[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
Lesson * selectedLesson = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||
[[self.lessonsDatabase managedObjectContext] deleteObject:selectedLesson];
|
||||
}
|
||||
// else if (editingStyle == UITableViewCellEditingStyleInsert) {
|
||||
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@ -10,4 +10,7 @@
|
||||
|
||||
@interface EspagramMainTableViewController : UITableViewController
|
||||
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIBarButtonItem *aboutButton;
|
||||
|
||||
@end
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
#import "EspagramMainTableViewController.h"
|
||||
#import "SpanishConjugator.h"
|
||||
#import "EspagramTestViewController.h"
|
||||
#import "EspagramLessonViewController.h"
|
||||
|
||||
@interface EspagramMainTableViewController ()
|
||||
@property (nonatomic, strong) NSString *language, *displayTitle;
|
||||
@ -20,6 +21,7 @@
|
||||
@synthesize language = _language;
|
||||
@synthesize tense = _tense;
|
||||
@synthesize displayTitle = _displayTitle;
|
||||
@synthesize aboutButton = _aboutButton;
|
||||
|
||||
- (id)initWithStyle:(UITableViewStyle)style
|
||||
{
|
||||
@ -30,22 +32,13 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidLoad];
|
||||
|
||||
// Uncomment the following line to preserve selection between presentations.
|
||||
// self.clearsSelectionOnViewWillAppear = NO;
|
||||
|
||||
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
|
||||
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
[self.aboutButton setTitle:NSLocalizedString(@"About button", @"About button text")];
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning
|
||||
{
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
# pragma mark - Espagram setters and getters
|
||||
|
||||
@ -66,18 +59,16 @@
|
||||
self.tense = [[Tense alloc] init];
|
||||
self.tense.tense = tense;
|
||||
self.displayTitle = [self.tense getTenseInLanguage:@"Spanish"];
|
||||
[self performSegueWithIdentifier:@"Testing" sender:self];
|
||||
[self performSegueWithIdentifier:@"Show Lessons" sender:self];
|
||||
}
|
||||
|
||||
|
||||
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
||||
|
||||
if ( [segue.identifier isEqualToString:@"Testing"]) {
|
||||
EspagramTestViewController * dest = segue.destinationViewController;
|
||||
dest.title = self.displayTitle;
|
||||
dest.conjugator= [self getLanguage];
|
||||
dest.tense =self.tense;
|
||||
if ( [segue.identifier isEqualToString:@"Show Lessons"]) {
|
||||
[segue.destinationViewController setConjugator:[self getLanguage]];
|
||||
[segue.destinationViewController setTense:self.tense];
|
||||
|
||||
}
|
||||
}
|
||||
@ -124,30 +115,39 @@
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
#pragma mark - Table view delegate
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
NSString * selectedTense = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;
|
||||
NSLog(@"Selected tense: %@", selectedTense);
|
||||
|
||||
if ( [selectedTense isEqualToString:@"Presente de indicativo"] ) {
|
||||
|
||||
if ( [selectedTense isEqualToString:@"Presente de Indicativo"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"SIMPLE_PRESENT"];
|
||||
} else if ( [selectedTense isEqualToString:@"Indefinido"] ) {
|
||||
} else if ( [selectedTense isEqualToString:@"Presente de Subjuntivo"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"PRESENT_SUBJUNCTIVE"];
|
||||
} else if ( [selectedTense isEqualToString:@"Pretérito Indefinido"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"SIMPLE_PAST"];
|
||||
} else if ( [selectedTense isEqualToString:@"Imperfecto"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"IMPERFECT"];
|
||||
} else if ( [selectedTense isEqualToString:@"Imperfecto de Subjuntivo"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"IMPERFECT_SUBJUNCTIVE"];
|
||||
} else if ( [selectedTense isEqualToString:@"Futuro"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"FUTURE"];
|
||||
} else if ( [selectedTense isEqualToString:@"Pretérito Perfecto"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"PRESENT_PERFECT"];
|
||||
} else if ( [selectedTense isEqualToString:@"Perfecto de Subjuntivo"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"PERFECT_SUBJUNCTIVE"];
|
||||
} else if ( [selectedTense isEqualToString:@"Pluscuamperfecto"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"PAST_PERFECT"];
|
||||
} else if ( [selectedTense isEqualToString:@"Pluscuamperfecto Subjuntivo"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"PAST_PERFECT_SUBJUNCTIVE"];
|
||||
} else if ( [selectedTense isEqualToString:@"Futuro Perfecto"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"FUTURE_PERFECT"];
|
||||
} else if ( [selectedTense isEqualToString:@"Condicional"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"CONDITIONAL"];
|
||||
} else if ( [selectedTense isEqualToString:@"Condicional Perfect"] ) {
|
||||
} else if ( [selectedTense isEqualToString:@"Condicional Perfecto"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"CONDITIONAL_PERFECT"];
|
||||
} else if ( [selectedTense isEqualToString:@"Gerundio"] ) {
|
||||
[self testVerbsWithLanguage: @"Spanish" andTense:@"GERUND"];
|
||||
|
||||
34
Espagram/EspagramNewLessonViewController.h
Normal file
34
Espagram/EspagramNewLessonViewController.h
Normal file
@ -0,0 +1,34 @@
|
||||
//
|
||||
// EspagramNewLessonViewController.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/13/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
@class EspagramConjugationTableViewController;
|
||||
|
||||
@protocol EspagramNewLessonDelegate
|
||||
- (void) addLesson:(NSString*)title withDescription:(NSString*) subTitle;
|
||||
- (void) cancelLesson;
|
||||
@end
|
||||
|
||||
@interface EspagramNewLessonViewController : UIViewController
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UILabel *nameLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UILabel *descriptionLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *addButton;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *cancelButton;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *lessonNameTextInput;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *lessonDescriptionTextInput;
|
||||
|
||||
@property (nonatomic,strong) id <EspagramNewLessonDelegate> dataSource;
|
||||
|
||||
@end
|
||||
70
Espagram/EspagramNewLessonViewController.m
Normal file
70
Espagram/EspagramNewLessonViewController.m
Normal file
@ -0,0 +1,70 @@
|
||||
//
|
||||
// EspagramNewLessonViewController.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/13/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EspagramNewLessonViewController.h"
|
||||
|
||||
@interface EspagramNewLessonViewController ()
|
||||
|
||||
@end
|
||||
|
||||
@implementation EspagramNewLessonViewController
|
||||
|
||||
@synthesize nameLabel = _nameLabel;
|
||||
@synthesize descriptionLabel = _descriptionLabel;
|
||||
@synthesize addButton = _addButton;
|
||||
@synthesize lessonDescriptionTextInput = _lessonDescriptionTextInput;
|
||||
@synthesize lessonNameTextInput = _lessonNameTextInput;
|
||||
@synthesize dataSource = _dataSource;
|
||||
|
||||
- (IBAction)editingDidEnd:(id)sender {
|
||||
[self resignFirstResponder];
|
||||
}
|
||||
|
||||
- (IBAction)addButtonPressed {
|
||||
NSLog(@"Add button pressed with %@", self.lessonNameTextInput.text);
|
||||
[self.dataSource addLesson:self.lessonNameTextInput.text withDescription:self.lessonDescriptionTextInput.text];
|
||||
}
|
||||
|
||||
- (IBAction)cancelButtonPressed:(id)sender {
|
||||
if ( !self.dataSource ) {
|
||||
NSLog(@"dataSource is not set");
|
||||
}
|
||||
NSLog(@"Cancel button pressed");
|
||||
[self.dataSource cancelLesson];
|
||||
}
|
||||
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
self.nameLabel.text = NSLocalizedString(@"Lesson title", @"Lesson title when adding a new lesson");
|
||||
self.descriptionLabel.text = NSLocalizedString(@"Description", @"Lesson description when adding a new lesson");
|
||||
|
||||
[self.addButton setTitle:NSLocalizedString(@"Add Lesson","Add button for adding a new lesson") forState:UIControlStateNormal];
|
||||
|
||||
[self.cancelButton setTitle:NSLocalizedString(@"Cancel Lesson","Cancel button when adding a new lesson") forState:UIControlStateNormal];
|
||||
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning
|
||||
{
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
@end
|
||||
@ -9,9 +9,29 @@
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "Conjugator.h"
|
||||
#import "EspagramConjugationTableViewController.h"
|
||||
#import "Lesson+Conjugator.h"
|
||||
#import "Lesson+Test.h"
|
||||
#import "Verb.h"
|
||||
|
||||
@interface EspagramTestViewController : UIViewController <EspagramConjugationTableView>
|
||||
@interface EspagramTestViewController : UIViewController
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UITextField *verbInput;
|
||||
@property (weak, nonatomic) IBOutlet UILabel *testedVerbLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UILabel *verbMeaningLable;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UILabel *verbPersonLabel;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *answer1Button;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *answer2Button;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *answer3Button;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *answer4Button;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIButton *nextButton;
|
||||
|
||||
|
||||
@property (strong, nonatomic) Lesson *lesson;
|
||||
|
||||
@end
|
||||
|
||||
@ -7,55 +7,191 @@
|
||||
//
|
||||
|
||||
#import "EspagramTestViewController.h"
|
||||
#import "NSMutableArray_Shuffling.h"
|
||||
|
||||
@interface EspagramTestViewController ()
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray * testSet;
|
||||
@property (nonatomic, strong) TestableVerb * currentVerb;
|
||||
@property (nonatomic) int correctAnswersInCurrentSet;
|
||||
@property (nonatomic) int wrongAnswersInCurrentSet;
|
||||
|
||||
@end
|
||||
|
||||
@implementation EspagramTestViewController
|
||||
|
||||
@synthesize conjugator = _conjugator;
|
||||
@synthesize tense = _tense;
|
||||
@synthesize verb = _verb;
|
||||
@synthesize verbInput;
|
||||
@synthesize lesson = _lesson;
|
||||
@synthesize testedVerbLabel = _testedVerbLabel;
|
||||
@synthesize verbMeaningLable = _testedVerbLable;
|
||||
@synthesize verbPersonLabel = _verbPersonLabel;
|
||||
@synthesize answer1Button = _answer1Button;
|
||||
@synthesize answer2Button = _answer2Button;
|
||||
@synthesize answer3Button = _answer3Button;
|
||||
@synthesize answer4Button = _answer4Button;
|
||||
@synthesize nextButton = _nextButton;
|
||||
@synthesize testSet = _testSet;
|
||||
@synthesize currentVerb = _currentVerb;
|
||||
@synthesize correctAnswersInCurrentSet = _correctAnswersInCurrentSet;
|
||||
@synthesize wrongAnswersInCurrentSet = _wrongAnswersInCurrentSet;
|
||||
|
||||
|
||||
- (NSMutableArray *)testSet{
|
||||
// Check if there are any verbs in the set
|
||||
if ( _testSet.count == 0) {
|
||||
_testSet = [self.lesson testableVerbs];
|
||||
self.correctAnswersInCurrentSet = 0;
|
||||
self.wrongAnswersInCurrentSet = 0;
|
||||
}
|
||||
return _testSet;
|
||||
};
|
||||
|
||||
- (NSString *) verb {
|
||||
if ( self.verbInput.text)
|
||||
_verb = self.verbInput.text;
|
||||
return _verb;
|
||||
}
|
||||
- (IBAction)EditingDidEnd:(UITextField *)sender {
|
||||
[self resignFirstResponder];
|
||||
}
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning
|
||||
{
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
|
||||
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
||||
- (IBAction)answered:(UIButton *)sender {
|
||||
|
||||
if ( [segue.identifier isEqualToString:@"Conjugate"]) {
|
||||
[segue.destinationViewController setDataSource:self];
|
||||
[segue.destinationViewController setTitle:[self.tense getTenseInLanguage:[self.conjugator description]]];
|
||||
NSString * correctAnswer = [self.lesson.getConjugationEngine conjugateVerb:self.currentVerb.verb.verb inPerson:self.currentVerb.person andTense:[self.lesson getTenseAsTense]];
|
||||
|
||||
|
||||
if ( [sender.titleLabel.text isEqualToString:correctAnswer]) {
|
||||
|
||||
[self setUILabelTitle:self.verbPersonLabel withText:[[[[[[self.lesson getConjugationEngine] persons] objectForKey:self.currentVerb.person] stringByAppendingString:@" "] stringByAppendingString:correctAnswer] stringByAppendingString:@" \u2705"] inColour:[UIColor greenColor] andSize:16];
|
||||
|
||||
} else {
|
||||
[self setUILabelTitle:self.verbPersonLabel withText:[[[[[[self.lesson getConjugationEngine] persons] objectForKey:self.currentVerb.person] stringByAppendingString:@" "] stringByAppendingString:sender.titleLabel.text] stringByAppendingString:@" \u274C"] inColour:[UIColor redColor] andSize:16];
|
||||
|
||||
// Set current test verb to failed
|
||||
self.currentVerb.failed = true;
|
||||
}
|
||||
}
|
||||
|
||||
- (id) popLastFromArray:(NSMutableArray *)a
|
||||
{
|
||||
id lastObject = nil;
|
||||
if ( a && a.count > 0 ) {
|
||||
lastObject = [a lastObject];
|
||||
NSLog(@"Popping: %@", lastObject);
|
||||
[a removeLastObject];
|
||||
}
|
||||
return lastObject;
|
||||
}
|
||||
|
||||
- (IBAction)nextButtonPressed:(id)sender {
|
||||
|
||||
[self.testSet removeLastObject];
|
||||
|
||||
[self nextVerb];
|
||||
}
|
||||
|
||||
- (void)setAnswerButton:(UIButton *)button withAnswer:(NSString *)answer andCorrect:(NSString *)correct
|
||||
{
|
||||
|
||||
[self setUIButtonTitle:button withText:answer inColour:[UIColor blackColor] forState:UIControlStateNormal];
|
||||
|
||||
if ( [answer isEqualToString:correct])
|
||||
[self setUIButtonTitle:button withText:answer inColour:[UIColor greenColor] forState:UIControlStateHighlighted];
|
||||
else
|
||||
[self setUIButtonTitle:button withText:answer inColour:[UIColor greenColor] forState:UIControlStateHighlighted];
|
||||
}
|
||||
|
||||
- (void) setUIButtonTitle:(UIButton *)button withText:(NSString *) titleString inColour:(UIColor *) colour forState:(UIControlState)controlState
|
||||
{
|
||||
NSAttributedString *title;
|
||||
title = [[NSAttributedString alloc] initWithString:titleString attributes:@{ NSFontAttributeName :
|
||||
[UIFont fontWithName:@"Noteworthy-Bold" size:16],
|
||||
// NSUnderlineStyleAttributeName : @1,
|
||||
NSStrokeColorAttributeName : colour}];
|
||||
|
||||
[button setAttributedTitle:title forState:controlState];
|
||||
|
||||
}
|
||||
|
||||
- (void) setUILabelTitle:(UILabel *)label withText:(NSString *) titleString inColour:(UIColor *) colour andSize:(int) fontSize;
|
||||
{
|
||||
NSAttributedString *title;
|
||||
title = [[NSAttributedString alloc] initWithString:titleString attributes:@{ NSFontAttributeName :
|
||||
[UIFont fontWithName:@"Noteworthy-Bold" size:fontSize],
|
||||
// NSUnderlineStyleAttributeName : @1,
|
||||
NSStrokeColorAttributeName : colour
|
||||
}];
|
||||
|
||||
label.attributedText = title;
|
||||
}
|
||||
|
||||
|
||||
- (void) nextVerb {
|
||||
NSMutableArray * answers;
|
||||
|
||||
if ( self.currentVerb && self.currentVerb.failed) {
|
||||
// Last test failed.. so we won't remove it
|
||||
// instead we shuffle the test set.
|
||||
[self.testSet shuffle];
|
||||
|
||||
// increase wrongly answered counter
|
||||
self.wrongAnswersInCurrentSet += 1;
|
||||
} {
|
||||
// Last verb answered correctly
|
||||
[self.testSet lastObject];
|
||||
|
||||
// increase wrongly answered counter
|
||||
self.correctAnswersInCurrentSet += 1;
|
||||
}
|
||||
|
||||
self.currentVerb = self.testSet.lastObject;
|
||||
|
||||
|
||||
if ( self.currentVerb) {
|
||||
|
||||
NSLog(@"Testing verb %@ in %@", self.currentVerb.verb.verb, self.currentVerb.person);
|
||||
|
||||
NSString * correctAnswer = [self.lesson.getConjugationEngine conjugateVerb:self.currentVerb.verb.verb inPerson:self.currentVerb.person andTense:[self.lesson getTenseAsTense]];
|
||||
|
||||
NSLog(@"Correct answer: %@", correctAnswer);
|
||||
|
||||
// Set display label to verb to test
|
||||
[self setUILabelTitle:self.testedVerbLabel withText:self.currentVerb.verb.verb inColour:[UIColor blackColor] andSize:30];
|
||||
|
||||
[self setUILabelTitle:self.verbMeaningLable withText:self.currentVerb.verb.meaning inColour:[UIColor blackColor] andSize:12];
|
||||
|
||||
[self setUILabelTitle:self.verbPersonLabel withText:[[[self.lesson getConjugationEngine] persons] objectForKey:self.currentVerb.person] inColour:[UIColor blackColor] andSize:16];
|
||||
|
||||
|
||||
// Get the shuffles answers;
|
||||
answers = [self.lesson.getConjugationEngine getTestConjugationsForVerb:self.currentVerb.verb.verb inPerson:self.currentVerb.person andTense:[self.lesson getTenseAsTense]];
|
||||
|
||||
|
||||
[self setAnswerButton:self.answer1Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer];
|
||||
|
||||
[self setAnswerButton:self.answer2Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer];
|
||||
|
||||
[self setAnswerButton:self.answer3Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer];
|
||||
|
||||
[self setAnswerButton:self.answer4Button withAnswer:[self popLastFromArray:answers] andCorrect:correctAnswer];
|
||||
|
||||
} else {
|
||||
NSLog(@"Que horror, no lesson!");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated
|
||||
{
|
||||
[super viewDidAppear:animated];
|
||||
|
||||
self.nextButton.titleLabel.text = NSLocalizedString(@"Next", @"Next button in the testing screen to continue to the next verb");
|
||||
|
||||
[self.nextButton setTitle:NSLocalizedString(@"Next", @"Next button in the testing screen to continue to the next verb") forState:UIControlStateNormal];
|
||||
|
||||
self.title = [self.lesson getTenseName];
|
||||
|
||||
if ( [self.testSet count] > 0) {
|
||||
[self nextVerb];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
19
Espagram/EspagramWordsInLessonViewController.h
Normal file
19
Espagram/EspagramWordsInLessonViewController.h
Normal file
@ -0,0 +1,19 @@
|
||||
//
|
||||
// EspagramWordsInLessonViewController.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/14/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "CoreDataTableViewController.h"
|
||||
#import "EspagramAddWordToLessonViewController.h"
|
||||
#import "EspagramConjugationTableViewController.h"
|
||||
#import "Lesson.h"
|
||||
|
||||
@interface EspagramWordsInLessonViewController : CoreDataTableViewController <EspagramAddWordToLessonViewControllerDelegate>;
|
||||
|
||||
@property (nonatomic, strong) Lesson * lesson;
|
||||
|
||||
@end
|
||||
140
Espagram/EspagramWordsInLessonViewController.m
Normal file
140
Espagram/EspagramWordsInLessonViewController.m
Normal file
@ -0,0 +1,140 @@
|
||||
//
|
||||
// EspagramWordsInLessonViewController.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/14/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EspagramWordsInLessonViewController.h"
|
||||
#import "Conjugator.h"
|
||||
#import "Verb+Create.h"
|
||||
|
||||
@interface EspagramWordsInLessonViewController ()
|
||||
@end
|
||||
|
||||
@implementation EspagramWordsInLessonViewController
|
||||
|
||||
@synthesize lesson = _lesson;
|
||||
|
||||
|
||||
- (IBAction)AddButtonPressed:(id)sender {
|
||||
[self performSegueWithIdentifier:@"Add A Word To Lesson" sender:self];
|
||||
}
|
||||
|
||||
- (void) addWord:(NSString *)word withMeaning:(NSString *)meaning{
|
||||
if ( word ) {
|
||||
[Verb addVerb:word andMeaning:meaning toLesson:self.lesson];
|
||||
}
|
||||
[[self parentViewController] dismissViewControllerAnimated:TRUE completion:^{
|
||||
NSLog(@"Word added");
|
||||
}];
|
||||
}
|
||||
|
||||
- (void) cancelAddingWord{
|
||||
[[self parentViewController] dismissViewControllerAnimated:TRUE completion:^{ NSLog(@"Adding a word cancelled");
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)setupFetchedResultsController // attaches an NSFetchRequest to this UITableViewController
|
||||
{
|
||||
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Verb"];
|
||||
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"verb"
|
||||
ascending:YES
|
||||
selector:@selector(localizedCompare:)]];
|
||||
|
||||
request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSPredicate predicateWithFormat:@"lesson.title = %@", self.lesson.title], [NSPredicate predicateWithFormat:@"lesson.tense = %@", self.lesson.tense], [NSPredicate predicateWithFormat:@"lesson.conjugator = %@", self.lesson.conjugator],nil]];
|
||||
|
||||
|
||||
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
|
||||
managedObjectContext:self.lesson.managedObjectContext
|
||||
sectionNameKeyPath:nil
|
||||
cacheName:nil];
|
||||
}
|
||||
|
||||
|
||||
- (void)setLesson:(Lesson *)lesson
|
||||
{
|
||||
_lesson = lesson;
|
||||
self.title = lesson.title;
|
||||
[self setupFetchedResultsController];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
static NSString *CellIdentifier = @"Word Cell";
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
|
||||
|
||||
// Configure the cell...
|
||||
Verb * verb = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||
cell.textLabel.text = verb.verb;
|
||||
cell.detailTextLabel.text = verb.meaning;
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
|
||||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
|
||||
{
|
||||
if ( [segue.identifier isEqualToString:@"Add A Word To Lesson"]) {
|
||||
[segue.destinationViewController setDataSource:self];
|
||||
}
|
||||
|
||||
if ( [segue.identifier isEqualToString:@"Conjugate"]) {
|
||||
Verb * selectedVerb = [self.fetchedResultsController objectAtIndexPath:sender];
|
||||
[segue.destinationViewController setVerb:selectedVerb];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Override to support conditional editing of the table view.
|
||||
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
// Return NO if you do not want the specified item to be editable.
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Override to support editing the table view.
|
||||
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
||||
// Delete the row from the data source
|
||||
//[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
|
||||
Verb * selectedVerb = [self.fetchedResultsController objectAtIndexPath:indexPath];
|
||||
[self.lesson removeVerbsObject:selectedVerb];
|
||||
}
|
||||
// else if (editingStyle == UITableViewCellEditingStyleInsert) {
|
||||
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// Override to support rearranging the table view.
|
||||
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
|
||||
{
|
||||
}
|
||||
*/
|
||||
|
||||
/*
|
||||
// Override to support conditional rearranging of the table view.
|
||||
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
// Return NO if you do not want the item to be re-orderable.
|
||||
return YES;
|
||||
}
|
||||
*/
|
||||
|
||||
#pragma mark - Table view delegate
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
[self performSegueWithIdentifier:@"Conjugate" sender:indexPath];
|
||||
}
|
||||
|
||||
@end
|
||||
@ -1,21 +0,0 @@
|
||||
//
|
||||
// GrammarTestViewController.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 10/15/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "Conjugator.h"
|
||||
#import "EspagramConjugationTableViewController.h"
|
||||
|
||||
@class GrammarTestViewController;
|
||||
|
||||
@interface GrammarTestViewController : UIViewController <EspagramConjugationTableView>
|
||||
|
||||
@property (weak, nonatomic) UITextField *verbInput;
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *conjugatedVerbTable;
|
||||
|
||||
@end
|
||||
@ -1,69 +0,0 @@
|
||||
//
|
||||
// GrammarTestViewController.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 10/15/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "GrammarTestViewController.h"
|
||||
|
||||
|
||||
@implementation GrammarTestViewController
|
||||
|
||||
@synthesize conjugator = _conjugator;
|
||||
@synthesize verbInput = _verbInput;
|
||||
@synthesize tense = _tense;
|
||||
@synthesize verb = _verb;
|
||||
@synthesize conjugatedVerbTable = _conjugatedVerbTable;
|
||||
|
||||
|
||||
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
|
||||
{
|
||||
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
|
||||
if (self) {
|
||||
// Custom initialization
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (IBAction)verbEntered:(id)sender {
|
||||
self.verb = self.verbInput.text;
|
||||
[self.view resignFirstResponder];
|
||||
}
|
||||
|
||||
- (void) verb:(NSString *) verb {
|
||||
_verb = verb;
|
||||
if ( ! [_verb isEqualToString:self.verbInput.text])
|
||||
self.verbInput.text = _verb;
|
||||
}
|
||||
|
||||
- (void) setup{
|
||||
NSLog([self.conjugator description]);
|
||||
NSLog(@"Persons %d", [[[self conjugator] persons] count]);
|
||||
}
|
||||
|
||||
- (void) awakeFromNib
|
||||
{
|
||||
[self setup];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
|
||||
[self setup];
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning
|
||||
{
|
||||
[super didReceiveMemoryWarning];
|
||||
// Dispose of any resources that can be recreated.
|
||||
}
|
||||
;
|
||||
- (void)viewDidUnload {
|
||||
[self setVerbInput:nil];
|
||||
[super viewDidUnload];
|
||||
}
|
||||
@end
|
||||
21
Espagram/Lesson+Conjugator.h
Normal file
21
Espagram/Lesson+Conjugator.h
Normal file
@ -0,0 +1,21 @@
|
||||
//
|
||||
// Lesson+Conjugator.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/14/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson.h"
|
||||
#import "Conjugator.h"
|
||||
#import "tense.h"
|
||||
|
||||
@interface Lesson (Conjugator)
|
||||
|
||||
- (id <Conjugator>)getConjugationEngine;
|
||||
|
||||
- (Tense *) getTenseAsTense;
|
||||
|
||||
- (NSString *) getTenseName;
|
||||
|
||||
@end
|
||||
37
Espagram/Lesson+Conjugator.m
Normal file
37
Espagram/Lesson+Conjugator.m
Normal file
@ -0,0 +1,37 @@
|
||||
//
|
||||
// Lesson+Conjugator.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/14/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson+Conjugator.h"
|
||||
#import "SpanishConjugator.h"
|
||||
|
||||
@implementation Lesson (Conjugator)
|
||||
|
||||
|
||||
- (id <Conjugator>) getConjugationEngine
|
||||
{
|
||||
if ( [self.conjugator isEqualToString:@"Spanish"] )
|
||||
return [[SpanishConjugator alloc] init];
|
||||
else
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (Tense *) getTenseAsTense
|
||||
{
|
||||
Tense * tense = [[Tense alloc] init];
|
||||
tense.tense = self.tense;
|
||||
return tense;
|
||||
}
|
||||
|
||||
- (NSString *) getTenseName
|
||||
{
|
||||
Tense * tense = [[Tense alloc] init];
|
||||
tense.tense = self.tense;
|
||||
return [tense getTenseInLanguage:self.conjugator];
|
||||
}
|
||||
|
||||
@end
|
||||
18
Espagram/Lesson+Create.h
Normal file
18
Espagram/Lesson+Create.h
Normal file
@ -0,0 +1,18 @@
|
||||
//
|
||||
// Lesson+Create.h
|
||||
// Palabel
|
||||
//
|
||||
// Created by Abel Fokkinga on 1/29/12.
|
||||
// Copyright (c) 2012 T-consult International vof. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson.h"
|
||||
#import "Tense.h"
|
||||
#import "Conjugator.h"
|
||||
|
||||
@interface Lesson (Create)
|
||||
|
||||
+ (void) addLessonWithTitle:(NSString *) title andSubTitle:(NSString *)subTitle
|
||||
inTense:(Tense *)tense conjugatedBy:(id <Conjugator>) conjugator inManagedObjectContext:(NSManagedObjectContext *) context;
|
||||
|
||||
@end
|
||||
50
Espagram/Lesson+Create.m
Normal file
50
Espagram/Lesson+Create.m
Normal file
@ -0,0 +1,50 @@
|
||||
//
|
||||
// Lesson+Create.m
|
||||
// Palabel
|
||||
//
|
||||
// Created by Abel Fokkinga on 1/29/12.
|
||||
// Copyright (c) 2012 T-consult International vof. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson+Create.h"
|
||||
|
||||
@implementation Lesson (Create)
|
||||
|
||||
+ (void) addLessonWithTitle:(NSString *) title andSubTitle:(NSString *)subTitle
|
||||
inTense:(Tense *)tense conjugatedBy:(id <Conjugator>) conjugator inManagedObjectContext:(NSManagedObjectContext *) context
|
||||
|
||||
{
|
||||
Lesson *lesson = nil;
|
||||
// Check if a lesson with this name already exists for this tense
|
||||
|
||||
NSLog(@"Adding Lesson %@ for tense %@ in %@ at context %@", title, tense.tense, [conjugator description], context);
|
||||
|
||||
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Lesson"];
|
||||
|
||||
// Where clause
|
||||
request.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:[NSPredicate predicateWithFormat:@"title = %@", title],[NSPredicate predicateWithFormat:@"tense = %@", tense.tense], [NSPredicate predicateWithFormat:@"conjugator = %@", [conjugator description]],nil]];
|
||||
|
||||
// Order by
|
||||
//request.sortDescriptors = [NSSortDescriptor sortDescriptorWithKey:@"dateAdded" ascending:YES];
|
||||
|
||||
|
||||
NSError *error = nil;
|
||||
NSArray *lessons = [context executeFetchRequest:request error:&error];
|
||||
|
||||
if ( error || [lessons count] > 0) {
|
||||
NSLog(@"Could not add lesson: %@", error.description);
|
||||
} else {
|
||||
NSLog(@"Inserting new lesson in context %@", context);
|
||||
lesson = [NSEntityDescription insertNewObjectForEntityForName:@"Lesson" inManagedObjectContext:context];
|
||||
lesson.title = title;
|
||||
lesson.subTitle = subTitle;
|
||||
lesson.tense = tense.tense;
|
||||
lesson.conjugator = [conjugator description];
|
||||
lesson.dateAdded = [[NSDate alloc] initWithTimeIntervalSinceNow:0];
|
||||
|
||||
NSLog(@"Saving context");
|
||||
[context save:&error];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
18
Espagram/Lesson+Test.h
Normal file
18
Espagram/Lesson+Test.h
Normal file
@ -0,0 +1,18 @@
|
||||
//
|
||||
// Lesson+Test.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/15/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson.h"
|
||||
#import "TestableVerb.h"
|
||||
|
||||
|
||||
@interface Lesson (Test)
|
||||
|
||||
// Returns TestableVerbs
|
||||
- (NSMutableArray *) testableVerbs;
|
||||
|
||||
@end
|
||||
33
Espagram/Lesson+Test.m
Normal file
33
Espagram/Lesson+Test.m
Normal file
@ -0,0 +1,33 @@
|
||||
//
|
||||
// Lesson+Test.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/15/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson+Conjugator.h"
|
||||
#import "Lesson+Test.h"
|
||||
#import "Conjugator.h"
|
||||
#import "NSMutableArray_Shuffling.h"
|
||||
|
||||
@implementation Lesson (Test)
|
||||
|
||||
- (NSArray *) testableVerbs;
|
||||
{
|
||||
NSMutableArray *testableVerbs = [[NSMutableArray alloc] init];
|
||||
for ( NSString *person in [[self getConjugationEngine] personsKeys]) {
|
||||
for ( Verb *verb in self.verbs.allObjects) {
|
||||
TestableVerb * testableVerb = [[TestableVerb alloc] init];
|
||||
testableVerb.verb = verb;
|
||||
testableVerb.person = person;
|
||||
[testableVerbs addObject:testableVerb];
|
||||
}
|
||||
}
|
||||
// shuffle list
|
||||
[testableVerbs shuffle];
|
||||
|
||||
return testableVerbs;
|
||||
}
|
||||
|
||||
@end
|
||||
31
Espagram/Lesson.h
Normal file
31
Espagram/Lesson.h
Normal file
@ -0,0 +1,31 @@
|
||||
//
|
||||
// Lesson.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/13/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class Verb;
|
||||
|
||||
@interface Lesson : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSDate * dateAdded;
|
||||
@property (nonatomic, retain) NSString * subTitle;
|
||||
@property (nonatomic, retain) NSString * tense;
|
||||
@property (nonatomic, retain) NSString * title;
|
||||
@property (nonatomic, retain) NSString * conjugator;
|
||||
@property (nonatomic, retain) NSSet *verbs;
|
||||
@end
|
||||
|
||||
@interface Lesson (CoreDataGeneratedAccessors)
|
||||
|
||||
- (void)addVerbsObject:(Verb *)value;
|
||||
- (void)removeVerbsObject:(Verb *)value;
|
||||
- (void)addVerbs:(NSSet *)values;
|
||||
- (void)removeVerbs:(NSSet *)values;
|
||||
|
||||
@end
|
||||
22
Espagram/Lesson.m
Normal file
22
Espagram/Lesson.m
Normal file
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Lesson.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/13/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Lesson.h"
|
||||
#import "Verb.h"
|
||||
|
||||
|
||||
@implementation Lesson
|
||||
|
||||
@dynamic dateAdded;
|
||||
@dynamic subTitle;
|
||||
@dynamic tense;
|
||||
@dynamic title;
|
||||
@dynamic conjugator;
|
||||
@dynamic verbs;
|
||||
|
||||
@end
|
||||
@ -1,19 +0,0 @@
|
||||
//
|
||||
// Persons.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
|
||||
@interface Persons : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSString * language;
|
||||
@property (nonatomic, retain) NSString * person;
|
||||
@property (nonatomic, retain) NSString * translation;
|
||||
|
||||
@end
|
||||
@ -1,18 +0,0 @@
|
||||
//
|
||||
// Persons.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Persons.h"
|
||||
|
||||
|
||||
@implementation Persons
|
||||
|
||||
@dynamic language;
|
||||
@dynamic person;
|
||||
@dynamic translation;
|
||||
|
||||
@end
|
||||
@ -12,5 +12,4 @@
|
||||
@interface SpanishConjugator : NSObject <Conjugator>
|
||||
|
||||
|
||||
|
||||
@end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
17
Espagram/Tense.h
Normal file
17
Espagram/Tense.h
Normal file
@ -0,0 +1,17 @@
|
||||
//
|
||||
// Tense.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/8/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface Tense : NSObject
|
||||
|
||||
@property (nonatomic, strong) NSString * tense;
|
||||
|
||||
- (NSString *) getTenseInLanguage:(NSString *)language;
|
||||
|
||||
@end
|
||||
73
Espagram/Tense.m
Normal file
73
Espagram/Tense.m
Normal file
@ -0,0 +1,73 @@
|
||||
//
|
||||
// Tense.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/8/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Tense.h"
|
||||
|
||||
@interface Tense()
|
||||
@property (nonatomic, strong) NSDictionary * text;
|
||||
@end
|
||||
|
||||
@implementation Tense
|
||||
|
||||
@synthesize tense = _tense;
|
||||
@synthesize text = _text;
|
||||
|
||||
- (void) tense:(NSString *)t {
|
||||
if ( ![t isEqualToString:_tense]){
|
||||
_tense = t;
|
||||
// reset dictionary
|
||||
NSLog(@"Resetting tense");
|
||||
self.text = nil;
|
||||
}
|
||||
}
|
||||
|
||||
- (NSDictionary *) text {
|
||||
if ( !_text) {
|
||||
if ( [self.tense isEqualToString:@"SIMPLE_PRESENT"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Presente",@"Simple present",@"Onvoltooid tegenwoordige tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"SIMPLE_PAST"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Indefinido",@"Simple past",@"Verleden tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"IMPERFECT"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Imperfecto",@"Imperfect",@"Onvoltooid verleden tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"FUTURE"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Futuro",@"Future",@"Toekomstige tijd",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"PRESENT_PERFECT"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Perfecto",@"Present perfect",@"Pretérito perfecto",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"PAST_PERFECT"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Pluscuamperfecto",@"Past perfect",@"Pretérito pluscuamperfecto",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"FUTURE_PERFECT"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Futuro perfecto",@"Future perfect",@"Pretérito pluscuamperfecto",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"CONDITIONAL"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Condicional",@"Conditional",@"Voorwaardelijke wijs",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"GERUND"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Gerundio",@"Gerund",@"Tegenwoordig deelwoord",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
if ( [self.tense isEqualToString:@"IMPERATIVE"])
|
||||
_text = [[NSDictionary alloc] initWithObjects:[[NSArray alloc]
|
||||
initWithObjects:@"Imperativo",@"Imperative",@"Gebiedende wijs",nil] forKeys:[[NSArray alloc] initWithObjects:@"Spanish",@"English",@"Dutch", nil]];
|
||||
}
|
||||
|
||||
return _text;
|
||||
}
|
||||
|
||||
- (NSString *) getTenseInLanguage:(NSString *)language {
|
||||
return [self.text objectForKey:language];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
||||
@ -1,19 +0,0 @@
|
||||
//
|
||||
// Tenses.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
|
||||
@interface Tenses : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSString * tense;
|
||||
@property (nonatomic, retain) NSString * language;
|
||||
@property (nonatomic, retain) NSString * translation;
|
||||
|
||||
@end
|
||||
@ -1,18 +0,0 @@
|
||||
//
|
||||
// Tenses.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Tenses.h"
|
||||
|
||||
|
||||
@implementation Tenses
|
||||
|
||||
@dynamic tense;
|
||||
@dynamic language;
|
||||
@dynamic translation;
|
||||
|
||||
@end
|
||||
@ -1,22 +0,0 @@
|
||||
//
|
||||
// TestBrain.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 10/20/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "TestableConjugation.h"
|
||||
|
||||
@interface TestBrain : NSObject
|
||||
|
||||
@property (readonly) NSArray *testVerb;
|
||||
|
||||
|
||||
- (NSArray *) testConjugation:(TestableConjugation *) conjugation;
|
||||
|
||||
- (Boolean *) checkAnswer:(NSString *)answer forConjugation:(TestableConjugation *) conjugation;
|
||||
|
||||
|
||||
@end
|
||||
@ -1,34 +0,0 @@
|
||||
//
|
||||
// TestBrain.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 10/20/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TestBrain.h"
|
||||
|
||||
@interface TestBrain()
|
||||
|
||||
@property (nonatomic, strong) NSDictionary *testSet;
|
||||
|
||||
@end
|
||||
|
||||
@implementation TestBrain
|
||||
|
||||
@synthesize testSet = _testSet;
|
||||
|
||||
|
||||
- (NSArray *) testConjugation:(TestableConjugation *) conjugation {
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (int) checkAnswer:(NSString *)answer forConjugation:(TestableConjugation *) conjugation {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@end
|
||||
18
Espagram/TestableVerb.h
Normal file
18
Espagram/TestableVerb.h
Normal file
@ -0,0 +1,18 @@
|
||||
//
|
||||
// TestableVerb.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/15/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "Verb.h"
|
||||
|
||||
@interface TestableVerb : NSObject
|
||||
|
||||
@property (nonatomic, strong) Verb * verb;
|
||||
@property (nonatomic, strong) NSString * person;
|
||||
@property BOOL failed;
|
||||
|
||||
@end
|
||||
18
Espagram/TestableVerb.m
Normal file
18
Espagram/TestableVerb.m
Normal file
@ -0,0 +1,18 @@
|
||||
//
|
||||
// TestableVerb.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/15/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TestableVerb.h"
|
||||
|
||||
@implementation TestableVerb
|
||||
|
||||
@synthesize verb = _verb;
|
||||
@synthesize person = _person;
|
||||
@synthesize failed = _failed;
|
||||
|
||||
|
||||
@end
|
||||
16
Espagram/Verb+Create.h
Normal file
16
Espagram/Verb+Create.h
Normal file
@ -0,0 +1,16 @@
|
||||
//
|
||||
// Verb+Create.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/16/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Verb.h"
|
||||
#import "Lesson.h"
|
||||
|
||||
@interface Verb (Create)
|
||||
|
||||
+ (void) addVerb:(NSString *)newVerb andMeaning:(NSString *)meaning toLesson:(Lesson *)lesson;
|
||||
|
||||
@end
|
||||
61
Espagram/Verb+Create.m
Normal file
61
Espagram/Verb+Create.m
Normal file
@ -0,0 +1,61 @@
|
||||
//
|
||||
// Verb+Create.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/16/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Verb+Create.h"
|
||||
|
||||
|
||||
@implementation Verb (Create)
|
||||
|
||||
+ (void) addVerb:(NSString *)newVerb andMeaning:(NSString *)meaning toLesson:(Lesson *)lesson
|
||||
{
|
||||
Verb * verb = [NSEntityDescription insertNewObjectForEntityForName:@"Verb" inManagedObjectContext:[lesson managedObjectContext]];
|
||||
|
||||
// Check first if the lessons already contains this verb
|
||||
for ( Verb * v in lesson.verbs) {
|
||||
if ( [newVerb isEqualToString:v.verb]) {
|
||||
if (meaning == nil)
|
||||
return;
|
||||
else if ([meaning isEqualToString:v.meaning])
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( [lesson.conjugator isEqualToString:@"Spanish"]) {
|
||||
if ( newVerb.length >= 2 ) {
|
||||
NSString *verbExit = [newVerb substringFromIndex:newVerb.length - 2];
|
||||
if ( ![verbExit isEqualToString:@"ar"] &&
|
||||
![verbExit isEqualToString:@"er"] &&
|
||||
![verbExit isEqualToString:@"ir"] &&
|
||||
![verbExit isEqualToString:@"ír"] &&
|
||||
![verbExit isEqualToString:@"se"] ) {
|
||||
// Not an existing Spanish verb
|
||||
return;
|
||||
}
|
||||
if ( [verbExit isEqualToString:@"se"] && newVerb.length >= 4 ) {
|
||||
verbExit = [[newVerb substringFromIndex:newVerb.length - 4] substringToIndex:2];
|
||||
if ( ![verbExit isEqualToString:@"ar"] &&
|
||||
![verbExit isEqualToString:@"er"] &&
|
||||
![verbExit isEqualToString:@"ir"] &&
|
||||
![verbExit isEqualToString:@"ír"] ) {
|
||||
// Not an existing Spanish verb
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Verb should be longer than 2 characters
|
||||
return;
|
||||
}
|
||||
}
|
||||
NSLog(@"Adding word %@", newVerb);
|
||||
verb.verb = newVerb;
|
||||
verb.meaning = meaning;
|
||||
[lesson addVerbsObject:verb];
|
||||
[[lesson managedObjectContext] save:nil];
|
||||
};
|
||||
|
||||
@end
|
||||
20
Espagram/Verb.h
Normal file
20
Espagram/Verb.h
Normal file
@ -0,0 +1,20 @@
|
||||
//
|
||||
// Verb.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/13/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class Lesson;
|
||||
|
||||
@interface Verb : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSString * meaning;
|
||||
@property (nonatomic, retain) NSString * verb;
|
||||
@property (nonatomic, retain) Lesson *lesson;
|
||||
|
||||
@end
|
||||
19
Espagram/Verb.m
Normal file
19
Espagram/Verb.m
Normal file
@ -0,0 +1,19 @@
|
||||
//
|
||||
// Verb.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 11/13/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Verb.h"
|
||||
#import "Lesson.h"
|
||||
|
||||
|
||||
@implementation Verb
|
||||
|
||||
@dynamic meaning;
|
||||
@dynamic verb;
|
||||
@dynamic lesson;
|
||||
|
||||
@end
|
||||
@ -1,22 +0,0 @@
|
||||
//
|
||||
// Verbs.h
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreData/CoreData.h>
|
||||
|
||||
@class ConjugatedTense;
|
||||
|
||||
@interface Verbs : NSManagedObject
|
||||
|
||||
@property (nonatomic, retain) NSString * verb;
|
||||
@property (nonatomic, retain) NSString * language;
|
||||
@property (nonatomic, retain) NSString * translation;
|
||||
@property (nonatomic, retain) NSString * root;
|
||||
@property (nonatomic, retain) ConjugatedTense *conjugatedTenses;
|
||||
|
||||
@end
|
||||
@ -1,21 +0,0 @@
|
||||
//
|
||||
// Verbs.m
|
||||
// Espagram
|
||||
//
|
||||
// Created by Abel Fokkinga on 8/29/12.
|
||||
// Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
//
|
||||
|
||||
#import "Verbs.h"
|
||||
#import "ConjugatedTense.h"
|
||||
|
||||
|
||||
@implementation Verbs
|
||||
|
||||
@dynamic verb;
|
||||
@dynamic language;
|
||||
@dynamic translation;
|
||||
@dynamic root;
|
||||
@dynamic conjugatedTenses;
|
||||
|
||||
@end
|
||||
BIN
Espagram/en.lproj/Localizable.strings
Normal file
BIN
Espagram/en.lproj/Localizable.strings
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
Espagram/es.lproj/Localizable.strings
Normal file
BIN
Espagram/es.lproj/Localizable.strings
Normal file
Binary file not shown.
85
Espagram/nl.lproj/Localizable.strings
Normal file
85
Espagram/nl.lproj/Localizable.strings
Normal file
@ -0,0 +1,85 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
Espagram
|
||||
|
||||
Created by Abel Fokkinga on 11/18/12.
|
||||
Copyright (c) 2012 Abel Fokkinga. All rights reserved.
|
||||
*/
|
||||
|
||||
/* About button text */
|
||||
"About button" = "Info";
|
||||
|
||||
/* Lessons title */
|
||||
"Lessons title" = "Lessen";
|
||||
|
||||
/* Add button for adding a new lesson */
|
||||
"Add Lesson" = "Opslaan";
|
||||
|
||||
/* "Cancel button when adding a new lesson" */
|
||||
"Cancel Lesson" = "Annuleer";
|
||||
|
||||
/* Add button when adding a verb to a lesson */
|
||||
"Add Verb" = "Toevoegen";
|
||||
|
||||
/* Cancel button to cancel adding a verb to a lesson */
|
||||
"Cancel Verb" = "Annuleer";
|
||||
|
||||
/* Lesson description when adding a new lesson */
|
||||
"Description" = "Omschrijving";
|
||||
|
||||
/* Lesson title when adding a new lesson */
|
||||
"Lesson title" = "Titel";
|
||||
|
||||
/* Adding the meaning of a new verb being added to a lesson */
|
||||
"Meaning" = "Betekenis";
|
||||
|
||||
/* Adding a new verb to a lesson */
|
||||
"New verb" = "Nieuw werkwoord";
|
||||
|
||||
/* Next button in the testing screen to continue to the next verb */
|
||||
"Next" = "Volgende";
|
||||
|
||||
/* Simple present tense description */
|
||||
"TENSE_SIMPLE_PRESENT" = "Tegenwoordige tijd";
|
||||
|
||||
/* Simple past tense description */
|
||||
"TENSE_SIMPLE_PAST" = "Verleden tijd";
|
||||
|
||||
/* Imperfect tense description */
|
||||
"TENSE_IMPERFECT" = "Onvoltooid verleden tijd";
|
||||
|
||||
/* Future tense description */
|
||||
"TENSE_FUTURE" = "Toekomende tijd";
|
||||
|
||||
/* Future perfect tense description */
|
||||
"TENSE_PRESENT_PERFECT" = "Voltooid tegenwoordige tijd";
|
||||
|
||||
/* Past perfect tense description */
|
||||
"TENSE_PAST_PERFECT" = "Voltooid verleden tijd";
|
||||
|
||||
/* Future perfect tense description */
|
||||
"TENSE_FUTURE_PERFECT" = "Voltooid tegenwoordige toekomende tijd";
|
||||
|
||||
/* Condicional tense description */
|
||||
"TENSE_CONDICIONAL" = "Onvoltooid verleden toekomende tijd";
|
||||
|
||||
/* Condicional tense description */
|
||||
"TENSE_CONDICIONAL_PERFECT" = "Voltooid verleden toekomende tijd";
|
||||
|
||||
/* Gerund tense description */
|
||||
"TENSE_GERUND" = "Gerundium";
|
||||
|
||||
/* Imperative tense description */
|
||||
"TENSE_IMPERATIVE" = "Gebiedende wijs";
|
||||
|
||||
/* Present subjunctive tense description */
|
||||
"TENSE_PRESENT_SUBJUNCTIVE" = "Aanvoegende wijs";
|
||||
|
||||
/* Present subjunctive tense description */
|
||||
"TENSE_PRESENT_PERFECT_SUBJUNCTIVE" = "Voltooid aanvoegende wijs";
|
||||
|
||||
/* Present perfect subjunctive tense description */
|
||||
"TENSE_IMPERFECT_SUBJUNCTIVE" = "Onvoltooid aanvoegende wijs";
|
||||
|
||||
/* Past perfect subjunctive tense description */
|
||||
"TENSE_PAST_PERFECT_SUBJUNCTIVE" = "Voltooid verleden aanvoegende wijs";
|
||||
BIN
Espagram/pt.lproj/Localizable.strings
Normal file
BIN
Espagram/pt.lproj/Localizable.strings
Normal file
Binary file not shown.
BIN
iPhoneIcon_Big.png
Normal file
BIN
iPhoneIcon_Big.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
iPhoneIcon_Small.png
Normal file
BIN
iPhoneIcon_Small.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.7 KiB |
Loading…
x
Reference in New Issue
Block a user