Version 0.2

This commit is contained in:
Abel Fokkinga 2012-11-23 23:06:49 +01:00
parent 04dd58a040
commit 3e9eb6a7e0
72 changed files with 5564 additions and 911 deletions

View File

@ -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 */;
}

View File

@ -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>

View File

@ -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>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0440"
LastUpgradeVersion = "0450"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View 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

View 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

View File

@ -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>

View File

@ -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>

View 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>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View 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

View 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

View File

@ -43,4 +43,6 @@
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

View File

@ -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

View File

@ -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

View 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

View 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

View File

@ -10,4 +10,7 @@
@interface EspagramMainTableViewController : UITableViewController
@property (weak, nonatomic) IBOutlet UIBarButtonItem *aboutButton;
@end

View File

@ -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"];

View 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

View 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

View File

@ -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

View File

@ -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

View 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

View 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

View File

@ -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

View File

@ -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

View 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

View 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
View 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
View 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
View 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
View 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
View 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
View 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

View File

@ -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

View File

@ -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

View File

@ -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
View 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
View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
View 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
View 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
View 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
View 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
View 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
View 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

View File

@ -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

View File

@ -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

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View 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";

Binary file not shown.

BIN
iPhoneIcon_Big.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
iPhoneIcon_Small.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB