100% found this document useful (1 vote)
11 views

Core Data By Tutorials Aaron Douglas 2024 scribd download

Core

Uploaded by

krammjuchaol
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
11 views

Core Data By Tutorials Aaron Douglas 2024 scribd download

Core

Uploaded by

krammjuchaol
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 55

Download the Full Version of textbook for Fast Typing at textbookfull.

com

Core Data By Tutorials Aaron Douglas

https://textbookfull.com/product/core-data-by-tutorials-
aaron-douglas/

OR CLICK BUTTON

DOWNLOAD NOW

Download More textbook Instantly Today - Get Yours Now at textbookfull.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Design Patterns by Tutorials Learning design patterns in


Swift 4 2 Joshua Greene

https://textbookfull.com/product/design-patterns-by-tutorials-
learning-design-patterns-in-swift-4-2-joshua-greene/

textboxfull.com

Core Data objc io Florian Kugler

https://textbookfull.com/product/core-data-objc-io-florian-kugler/

textboxfull.com

Concurrency by Tutorials Second Edition Multithreading in


Swift with GCD and Operations Tutorial Team

https://textbookfull.com/product/concurrency-by-tutorials-second-
edition-multithreading-in-swift-with-gcd-and-operations-tutorial-team/

textboxfull.com

Design Patterns by Tutorials Third Edition Learning Design


Patterns in Swift Raywenderlich Tutorial Team

https://textbookfull.com/product/design-patterns-by-tutorials-third-
edition-learning-design-patterns-in-swift-raywenderlich-tutorial-team/

textboxfull.com
Machine Learning by Tutorials Beginning Machine Learning
for Apple and iOS First Edition Raywenderlich Tutorial
Team
https://textbookfull.com/product/machine-learning-by-tutorials-
beginning-machine-learning-for-apple-and-ios-first-edition-
raywenderlich-tutorial-team/
textboxfull.com

iOS Test Driven Development by Tutorials First Edition


Learn Real World Test Driven Development Joshua Greene

https://textbookfull.com/product/ios-test-driven-development-by-
tutorials-first-edition-learn-real-world-test-driven-development-
joshua-greene/
textboxfull.com

iOS 11 by Tutorials Learning the new iOS APIs with Swift 4


1st Edition The Raywenderlich Tutorial Team

https://textbookfull.com/product/ios-11-by-tutorials-learning-the-new-
ios-apis-with-swift-4-1st-edition-the-raywenderlich-tutorial-team/

textboxfull.com

Core Data in Swift Data Storage and Management for iOS and
OS X 1st Edition Marcus Zarra

https://textbookfull.com/product/core-data-in-swift-data-storage-and-
management-for-ios-and-os-x-1st-edition-marcus-zarra/

textboxfull.com

Excel data analysis by examples Excel data analysis for


complete beginners Step By Step Illustrated Guide to
Mastering Excel data analysis Excel advance Book 1 Thanh
Tran
https://textbookfull.com/product/excel-data-analysis-by-examples-
excel-data-analysis-for-complete-beginners-step-by-step-illustrated-
guide-to-mastering-excel-data-analysis-excel-advance-book-1-thanh-
tran/
textboxfull.com
Core Data by Tutorials

Core Data by Tutorials


Aaron Douglas, Saul Mora, Matthew Morey and Pietro Rea

Copyright ©2016 Razeware LLC.

Notice of Rights
All rights reserved. No part of this book or corresponding materials (such as text,
images, or source code) may be reproduced or distributed by any means without
prior written permission of the copyright owner.

Notice of Liability
This book and all corresponding materials (such as source code) are provided on an
"as is" basis, without warranty of any kind, express of implied, including but not
limited to the warranties of merchantability, fitness for a particular purpose, and
noninfringement. In no event shall the authors or copyright holders be liable for any
claim, damages or other liability, whether in action of contract, tort or otherwise,
arising from, out of or in connection with the software or the use of other dealing in
the software.

Trademarks
All trademarks and registered trademarks appearing in this book are the property of
their own respective owners.

raywenderlich.com 2
Core Data by Tutorials

Dedications
"To my husband, Mike, and my parents - all whom have inspired me to
do my best and keep plugging away throughout the years."

— Aaron Douglas

"To my Family, Friends and the greater Apple Developer Community,


without your support and attention, my life and career would not be
nearly as awesome as it is with you all."

— Saul Mora

"To my amazing wife Tricia and my parents - Thanks for always


supporting me."

— Matthew Morey

"To my wonderful wife Emily and my parents Aldo and Zoraida. Thank
you for always supporting me every step of the way."

— Pietro Rea

raywenderlich.com 3
Core Data by Tutorials

About the authors


Aaron Douglas was that kid taking apart the mechanical and
electrical appliances at five years of age to see how they worked.
He never grew out of that core interest - to know how things work.
He took an early interest in computer programming, figuring out
how to get past security to be able to play games on his dad's
computer. He's still that feisty nerd, but at least now he gets paid
to do it. Aaron works for Automattic (WordPress.com, Akismet,
Simplenote) as a Mobile Maker primarily on the WordPress for iOS
app. Find Aaron on Twitter as @astralbodies.

Saul Mora is trained in the mystical and ancient arts of manual


memory management, compiler macros and separate header files.
Saul is a developer who honors his programming ancestors by
using Optional variables in swift on all UIs created from Nib files.
Despite being an Objective C neckbeard, Saul has embraced the
Swift programming language. Currently, Saul resides in Shanghai,
China working at (Liulishuo) helping Chinese learn English
while he is learning (mandarin).

Matthew Morey is an engineer, author, hacker, creator and


tinkerer. As an active member of the iOS community and Director
of Mobile Engineering at MJD Interactive he has led numerous
successful mobile projects worldwide. When not developing apps
he enjoys traveling, snowboarding, and surfing. He blogs about
technology and business at matthewmorey.com.

Pietro Rea is the founder and CEO of Sweetpea Mobile, a mobile-


focused strategy, design and software development agency based
just outside Washington D.C. Pietro's work has been featured in
Apple's App Stores many times across several different categories:
media, e-commerce, lifestyle and more. From Fortune 500
companies, to venture-backed startups to bootstrapped
independents, Pietro has a passion for mobile software
development done right. You can find Pietro on Twitter as
@pietrorea.

raywenderlich.com 4
Core Data by Tutorials

About the editors


Darren Ferguson is the technical editor for this book. He is a
Software Developer, with a passion for mobile development, for a
leading systems integration provider based out of Northern
Virginia in the D.C. metro area. When he's not coding, you can find
him enjoying life with his wife and daughter trying to travel as
much as possible.

Chris Belanger is the editor of this book. Chris Belanger is the


Book Team Lead and Lead Editor for raywenderlich.com. If there
are words to wrangle or a paragraph to ponder, he‘s on the case.
When he kicks back, you can usually find Chris with guitar in hand,
looking for the nearest beach, or exploring the lakes and rivers in
his part of the world in a canoe.

Rich Turton is the final pass editor of this book. Rich is an iOS
developer for MartianCraft, prolific Stack Overflow participant and
author of a development blog, Command Shift. When he's not in
front of a computer he is usually building Lego horse powered
spaceships (don't ask!) with his daughters.

raywenderlich.com 5
Core Data by Tutorials

Table of Contents: Overview


Introduction................................................................................ 10
Chapter 1: Your First Core Data App.................................. 16
Chapter 2: NSManagedObject Subclasses ........................ 36
Chapter 3: The Core Data Stack .......................................... 62
Chapter 4: Intermediate Fetching ........................................ 84
Chapter 5: NSFetchedResultsController ............................ 115
Chapter 6: Versioning and Migration ............................... 139
Chapter 7: Unit Testing ........................................................ 176
Chapter 8: Measuring and Boosting Performance ......... 193
Chapter 9: Multiple Managed Object Contexts ............. 223
Conclusion ............................................................................... 241

raywenderlich.com 6
Core Data by Tutorials

Table of Contents: Extended


Introduction................................................................................ 10
Introducing the third edition ............................................................................................. 11
What you need .................................................................................................................. 11
Who this book is for .......................................................................................................... 12
How to use this book ......................................................................................................... 12
What’s in store ................................................................................................................... 12
Source code and forums ................................................................................................... 13
Updates ............................................................................................................................... 14
License .................................................................................................................................. 14
About the cover .................................................................................................................. 15
Chapter 1: Your First Core Data App.................................. 16
Getting started .................................................................................................................. 16
Modeling your data .......................................................................................................... 25
Saving to Core Data ......................................................................................................... 28
Fetching from Core Data ................................................................................................. 33
Where to go from here? .................................................................................................. 35
Chapter 2: NSManagedObject Subclasses ........................ 36
Getting started .................................................................................................................. 36
Modeling your data .......................................................................................................... 39
Storing non-standard data types in Core Data .......................................................... 43
Managed object subclasses ............................................................................................. 44
Propagating a managed context ................................................................................... 47
Data validation in Core Data ......................................................................................... 56
Tying everything up ........................................................................................................... 60
Where to go from here? .................................................................................................. 61
Chapter 3: The Core Data Stack .......................................... 62
Getting started .................................................................................................................. 62
Rolling your own Core Data stack .................................................................................. 63
The managed object model ............................................................................................. 64
The persistent store ............................................................................................................ 64
The persistent store coordinator ..................................................................................... 65
The managed object context ........................................................................................... 66
The persistent store container .......................................................................................... 67

raywenderlich.com 7
Core Data by Tutorials

Creating your stack object ............................................................................................... 67


Modeling your data .......................................................................................................... 70
Adding managed object subclasses ............................................................................... 73
A walk down persistence lane ......................................................................................... 75
Deleting objects from Core Data.................................................................................... 80
Where to go from here? .................................................................................................. 82
Chapter 4: Intermediate Fetching ........................................ 84
NSFetchRequest: the star of the show ............................................................................ 84
Introducing the Bubble Tea app...................................................................................... 86
Stored fetch requests ........................................................................................................ 88
Fetching different result types ........................................................................................ 92
Sorting fetched results.................................................................................................... 107
Asynchronous fetching .................................................................................................... 110
Batch updates: no fetching required ........................................................................... 112
Where to go from here? ................................................................................................ 114
Chapter 5: NSFetchedResultsController ............................ 115
Introducing the World Cup app ................................................................................... 115
It all begins with a fetch request.................................................................................. 117
Grouping results into sections ........................................................................................ 125
“Cache” the ball .............................................................................................................. 128
Monitoring changes......................................................................................................... 129
Inserting an underdog .................................................................................................... 134
Where to go from here? ................................................................................................ 138
Chapter 6: Versioning and Migration ............................... 139
When to migrate ............................................................................................................. 139
The migration process ..................................................................................................... 140
Types of migrations ........................................................................................................ 140
Getting started ................................................................................................................ 141
A lightweight migration .................................................................................................. 143
Inferred mapping models .............................................................................................. 145
A manual migration ........................................................................................................ 150
A complex mapping model ........................................................................................... 158
Migrating non-sequential versions ............................................................................... 164
A self-migrating stack .................................................................................................... 165
Testing sequential migrations ........................................................................................ 173
Where to go from here? ................................................................................................ 174

raywenderlich.com 8
Core Data by Tutorials

Chapter 7: Unit Testing ........................................................ 176


Getting started ................................................................................................................ 177
Core Data stack for testing ........................................................................................... 178
Asynchronous tests ........................................................................................................... 183
Tests first............................................................................................................................ 185
Validation and refactoring ............................................................................................ 189
Where to go from here? ................................................................................................ 192
Chapter 8: Measuring and Boosting Performance ......... 193
Getting started ................................................................................................................ 193
Measure, change, verify ................................................................................................ 195
Fetching and performance ............................................................................................ 205
Where to go from here? ................................................................................................ 222
Chapter 9: Multiple Managed Object Contexts ............. 223
Getting started ................................................................................................................ 224
Introducing SurfJournal .................................................................................................. 224
Doing work in the background ..................................................................................... 228
Editing on a scratchpad ................................................................................................. 234
Where to go from here? ................................................................................................ 240
Conclusion ............................................................................... 241

raywenderlich.com 9
I Introduction

What is Core Data? You'll hear a variety of answers to this question: It’s a
database! It's SQLite! It's not a database! And so forth.

Here's the technical answer: Core Data is an object graph management and
persistence framework in the OS X and iOS SDKs.

That means Core Data can store and retrieve data, but it isn’t a relational database
like MySQL or SQLite. Although it can use SQLite as the data store behind the
scenes, you don’t think about Core Data in terms of tables and rows and primary
keys.

Imagine you’re writing an app to keep track of dining habits. You have a varied set
of objects: restaurant objects, each with properties such as name and address;
categories, to organize the restaurants; and visits, to log each visit to a restaurant.

The object graph in memory might look something like this:

Object graph management means Core Data works with objects that you define,
such as the ones in the diagram above. For example, each restaurant (represented
by a red bubble) would have a property pointing back to the category object. It
would also have a property holding the list of visits.

raywenderlich.com 10
Core Data by Tutorials Introduction

Since Cocoa is an object-oriented framework, you’re probably storing data in


objects already. Core Data builds on this to keep track of the objects and their
relationships to each other. You can imagine expanding the graph to include what
the user ordered, ratings and so on.

Persistence means the data is stored somewhere durable such as the device’s flash
memory or “the cloud.” You point to the entire graph and just say “save.”

When your app launches, you just say “load” and the entire object graph pops up in
memory again, ready for use. That’s Core Data at work!

Maybe your users eat out a lot and have thousands of restaurant visits — rest
assured Core Data is smart about lazily loading objects and caching to optimize
both memory usage and speed. Core Data has many other features aside from
simply storing and fetching data:

You can perform custom filtering with predicates, sort the data and and calculate
statistics. You’ll learn all about these features and more in this book.

Introducing the third edition


Core Data this year is all about lowering the barrier of entry:

• Say goodbye to screens and screens of code just to set up the Core Data “stack”.

• Say goodbye to generating and maintaining managed object subclasses.

• Say goodbye to having to tell Swift what type of managed object you're using.

• Say goodbye to single readers at the persistent store level.

• Say goodbye, sadly, to iCloud. Hey — it can't all be good news. :]

We've updated all the chapters in this book for Swift 3, iOS 10 and Xcode 8.

What you need


To follow along with the tutorials in this book, you’ll need the following:

• A Mac running OS X Yosemite (10.11) or later. You’ll need this to be able to


install the latest version of Xcode.

• Xcode 8.0 or later. Xcode is the main development tool for iOS. You can download
the latest version of Xcode for free from the Mac app store here: https://
itunes.apple.com/app/xcode/id497799835?mt=12

You can use the iOS 10 Simulator that comes with Xcode for all of the chapters.

raywenderlich.com 11
Core Data by Tutorials Introduction

Once you have these items in place, you’ll be able to follow along with every
chapter in this book.

Who this book is for


This book is for iOS developers who already know the basics of iOS and Swift, and
want to learn Core Data.

If you’re a complete beginner to iOS, we suggest you read through The iOS
Apprentice, 5th Edition first. That will give you a solid foundation in building iOS
apps from the ground-up.

If you know the basics of iOS development but are new to Swift, we suggest you
read Swift Apprentice first. That book has a similar hands-on approach and takes
you on a comprehensive tour through the Swift language.

You can find both of these prerequisite books at our store: raywenderlich.com/store

How to use this book


This book will teach you the fundamentals of Core Data by means of hands-on
tutorials. You’ll jump right into building a Core Data app in Chapter 1, as we think
most people learn best by doing. We encourage you to type along with the
instructions in the book.

If you’re new to Core Data or want to review the basics, we suggest you start with
Chapters 1–3. These chapters cover the fundamentals of Core Data and you’ll need
the knowledge in them to understand the rest of the book.

Otherwise, we suggest a pragmatic approach. Each chapter stands on its own, so


you can pick and choose the chapters that interest you the most.

What’s in store
Here’s a quick summary of what you’ll find in each chapter:

1. Chapter 1, Your First Core Data App: You’ll click File\New Project and write a
Core Data app from scratch! This chapter covers the basics of setting up your data
model and then adding and fetching records.

2. Chapter 2, NSManagedObject Subclasses: NSManagedObject is the base


data storage class of your Core Data object graphs. This chapter will teach you how
you customize your own managed object subclasses to store and validate data.

raywenderlich.com 12
Core Data by Tutorials Introduction

3. Chapter 3, The Core Data Stack: Under the hood, Core Data is made up of
many parts working together. In this chapter, you’ll learn about how these parts fit
together, and move away from the starter Xcode template to build your own
customizable system.

4. Chapter 4, Intermediate Fetching: Your apps will fetch data all the time, and
Core Data offers many options for getting the data to you efficiently. This chapter
covers more advanced fetch requests, predicates, sorting and asynchronous
fetching.

5. Chapter 5, NSFetchedResultsController: Table views are at the core of many


iOS apps, and Apple wants to make Core Data play nicely with them! In this
chapter, you’ll learn how NSFetchedResultsController can save you time and code
when your table views are backed by data from Core Data.

6. Chapter 6, Versioning and Migration: As you update and enhance your app,
its data model will almost certainly need to change. In this chapter, you’ll learn how
to create multiple versions of your data model and then migrate your users forward
so they can keep their existing data as they upgrade.

7. Chapter 7, Unit Tests: Testing is an important part of the development


process, and you shouldn’t leave Core Data out of those tests! In this chapter, you’ll
learn how to set up a separate test environment for Core Data and see examples of
how to test your models.

8. Chapter 8, Measuring and Boosting Performance: No one ever complained


that an app was too fast, so it’s important to be vigilant about tracking
performance. In this chapter, you’ll learn how to measure your app’s performance
with various Xcode tools and then pick up some tips for dealing with slow spots in
your code.

9. Chapter 9, Multiple Managed Object Contexts: In this final chapter, you’ll


expand the usual Core Data stack to include multiple managed object contexts.
You’ll learn how this can improve perceived performance and help make your app
architecture less monolithic and more compartmentalized.

Source code and forums


This book comes with complete source code for each of the chapters — it’s shipped
with the PDF. Some of the chapters also include starter projects or other required
resources, and you’ll definitely want to have these on hand as you go through the
book.

We’ve set up an official forum for the book at http://www.raywenderlich.com/


forums. This is a great place to ask questions you have about the book or about
developing Core Data apps, or to submit any errors or suggested updates.

raywenderlich.com 13
Core Data by Tutorials Introduction

Updates
Since you’ve purchased the PDF version of this book, you get free access to any
updates we make to the book!

The best way to get update notifications is to sign up for our monthly newsletter.
This includes a list of the tutorials that came out on raywenderlich.com that month,
any important news like book updates or new books, and a list of our favorite
development links for that month. You can sign up at this URL: http://
www.raywenderlich.com/newsletter

License
By purchasing Core Data by Tutorials, you have the following license:

• You are allowed to use and/or modify the source code in Core Data by Tutorials in
as many apps as you want, with no attribution required.

• You are allowed to use and/or modify all art, images and designs that are
included in Core Data by Tutorials in as many apps as you want, but must include
this attribution line somewhere inside your app: “Artwork/images/designs: from
Core Data by Tutorials book, available at http://www.raywenderlich.com.”

• The source code included in Core Data by Tutorials is for your personal use only.
You are NOT allowed to distribute or sell the source code in Core Data by
Tutorials without prior authorization.

• This book is for your personal use only. You are NOT allowed to sell this book
without prior authorization or distribute it to friends, co-workers or students;
they would need to purchase their own copies.

All materials provided with this book are provided on an “as is” basis, without
warranty of any kind, express or implied, including but not limited to the warranties
of merchantability, fitness for a particular purpose and non-infringement. In no
event shall the authors or copyright holders be liable for any claim, damages or
other liability, whether in an action of contract, tort or otherwise, arising from, out
of or in connection with the software or the use or other dealings in the software.

All trademarks and registered trademarks appearing in this book are the property of
their respective owners.

raywenderlich.com 14
Core Data by Tutorials Introduction

About the cover


The North Pacific giant octopus is normally red in color, but can quickly assume the
color of its surroundings to blend in and hide from predators. Since it has no
internal or external skeleton, it can squeeze into extremely small crevices. Core
Data is a lot like that; it's easier than ever to work it into your apps and let its
various tentacles weave their way into your persistent data store! :]

raywenderlich.com 15
1 Chapter 1: Your First Core
Data App
By Pietro Rea

Welcome to Core Data! In this chapter, you’ll write your very first Core Data app.
You’ll see how easy it is to get started with all the resources provided in Xcode,
from starter code templates to the Data Model editor.

You’re going to hit the ground running right from the start. By the end of the
chapter you’ll know how to:

• Model data using Xcode’s model editor

• Add new records to Core Data

• Fetch a set of records from Core Data

• Display the fetched records using a table view.

You’ll also get a sense of what Core Data is doing behind the scenes, and how you
can interact with the various moving pieces. This will put you well on your way to
understanding the next two chapters, which continue the introduction to Core Data
with more advanced models and data validation.

Getting started
Open Xcode and create a new iPhone project based on the Single View
Application template. Name the app HitList and make sure Use Core Data is
checked:

raywenderlich.com 16
Core Data by Tutorials Chapter 1: Your First Core Data App

Checking the Use Core Data box will cause Xcode to generate boilerplate code for
what’s known as an NSPersistentContainer in AppDelegate.swift.

The NSPersistentContainer consists of a set of objects that facilitate saving and


retrieving information from Core Data. Inside this container is an object to manage
the Core Data state as a whole, an object representing the Data Model, and so on.

You’ll learn about each of these pieces in the first few chapters. Later, you’ll even
have the chance to write your own Core Data stack! The standard stack works well
for most apps, but depending on your your app and its data requirements, you can
customize the stack to be more efficient.

Note: Not all Xcode templates under iOS/Application have the option to start
with Core Data. In Xcode 8, only the Master-Detail Application and Single
View Application templates have the Use Core Data checkbox.

The idea for this sample app is simple: There will be a table view with a list of
names for your very own "hit list". You’ll be able to add names to this list and
eventually, you’ll use Core Data to make sure the data is stored between sessions.
We don’t condone violence in this book, so you can think of this app as a favorites
list to keep track of your friends too, of course! :]

Click on Main.storyboard to open it in Interface Builder. Select the view controller


on the canvas and embed it inside a navigation controller. From Xcode’s Editor
menu, select Embed In…\ Navigation Controller.

raywenderlich.com 17
Core Data by Tutorials Chapter 1: Your First Core Data App

Next, drag a Table View from the object library into the view controller, then resize
it so it covers the entire view.

If not already open, use the icon located in the lower left corner of your canvas to
open Interface Builder’s document outline.

Ctrl-drag from the Table View in the document outline to its parent view and
select the Leading Space to Container Margin constraint:

Do this three more times, selecting the constraints Trailing Space to Container
Margin, Vertical Spacing to Top Layout Guide and finally, Vertical Spacing to
Bottom Layout Guide. Adding those four constraints makes the table view fill its
parent view.

raywenderlich.com 18
Core Data by Tutorials Chapter 1: Your First Core Data App

Next, drag a Bar Button Item and place it on the view controller’s navigation bar.
Finally, select the bar button item and change its system item to Add. Your canvas
should look similar to the following screenshot:

Every time you tap the Add button, an alert controller containing a text field will
appear. From there you’ll be able to type someone’s name into the text field.
Tapping Save will save the name, dismiss the alert controller and refresh the table
view, displaying all the names you’ve entered.

But first, you need to make the view controller the table view’s data source. In the
canvas, Ctrl-drag from the table view to the yellow view controller icon above the
navigation bar, as shown below, and click on dataSource:

raywenderlich.com 19
Core Data by Tutorials Chapter 1: Your First Core Data App

In case you were wondering, you don’t need to set up the table view’s delegate
since tapping on the cells won’t trigger any action. It doesn’t get simpler than this!

Open the assistant editor by pressing Command-Option-Enter or by selecting the


middle button on the Editor toolset on the Xcode bar. Delete the
didReceiveMemoryWarning() method. Next, Ctrl-drag from the table view onto
ViewController.swift, inside the class definition to create an IBOutlet:

Next, name the new IBOutlet property tableView, resulting in the following line:

@IBOutlet weak var tableView: UITableView!

Next, Ctrl-drag from the Add button into ViewController.swift just below your
viewDidLoad() definition. This time, create an action instead of an outlet, naming
the method addName, with a type UIBarButtonItem:

@IBAction func addName(_ sender: UIBarButtonItem) {

You can now refer to the table view and the bar button item’s action in code.

Next, you’ll set up the model for the table view. Add the following property to
ViewController.swift below the tableView IBOutlet:

var names: [String] = []

raywenderlich.com 20
Core Data by Tutorials Chapter 1: Your First Core Data App

names is a mutable array holding string values displayed by the table view. Next,
replace the implementation of viewDidLoad() with the following:

override func viewDidLoad() {


super.viewDidLoad()

title = "The List"


tableView.register(UITableViewCell.self,
forCellReuseIdentifier: "Cell")
}

This will set a title on the navigation bar and register the UITableViewCell class with
the table view.

Note: register(_:forCellReuseIdentifier:) guarantees your table view will


return a cell of the correct type when the Cell reuseIdentifier is provided to
the dequeue method.

Next, still in ViewController.swift, add the following UITableViewDataSource


extension below your class definition for ViewController:

// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {

func tableView(_ tableView: UITableView,


numberOfRowsInSection section: Int) -> Int {
return names.count
}

func tableView(_ tableView: UITableView,


cellForRowAt indexPath: IndexPath)
-> UITableViewCell {

let cell =
tableView.dequeueReusableCell(withIdentifier: "Cell",
for: indexPath)
cell.textLabel?.text = names[indexPath.row]
return cell
}
}

If you’ve ever worked with UITableView, this code should look very familiar. First
you return the number of rows in the table as the number of items in your names
array.

Next, tableView(_:cellForRowAt:) dequeues table view cells and populates them


with the corresponding string from the names array.

Next, you need a way to add new names so the table view can display them.
Implement the addName IBAction method you Ctrl-dragged into your code earlier:

raywenderlich.com 21
Core Data by Tutorials Chapter 1: Your First Core Data App

// Implement the addName IBAction


@IBAction func addName(_ sender: AnyObject) {

let alert = UIAlertController(title: "New Name",


message: "Add a new name",
preferredStyle: .alert)

let saveAction = UIAlertAction(title: "Save",


style: .default) {
[unowned self] action in

guard let textField = alert.textFields?.first,


let nameToSave = textField.text else {
return
}

self.names.append(nameToSave)
self.tableView.reloadData()
}

let cancelAction = UIAlertAction(title: "Cancel",


style: .default)

alert.addTextField()

alert.addAction(saveAction)
alert.addAction(cancelAction)

present(alert, animated: true)


}

Every time you tap the Add button, this method presents a UIAlertController with
a text field and two buttons, Save and Cancel.

Save inserts the text fields current text into the names array then reloads the table
view. Since the names array is the model backing the table view, whatever you type
into the text field will appear in the table view.

Finally, build and run your app for the first time. Next, tap the Add button. The
alert controller will look like this:

raywenderlich.com 22
Core Data by Tutorials Chapter 1: Your First Core Data App

Add four or five names to the list. You should see something similar to below:

Your table view will display the data and your array will store the names, but the
big thing missing here is persistence. The array is in memory but if you force quit
the app or reboot your device, your hit list will be wiped out.

raywenderlich.com 23
Core Data by Tutorials Chapter 1: Your First Core Data App

Core Data provides persistence, meaning it can store data in a more durable state
so it can outlive an app re-launch or a device reboot.

You haven’t added any Core Data yet, so nothing should persist after you navigate
away from the app. Let’s test this out. Press the Home button if you’re using a
physical device or the equivalent (Shift+⌘+H) if you’re using the Simulator. This
will take you back to the familiar app grid on the home screen:

From the home screen, tap the HitList icon to bring the app back to the
foreground. The names are still on the screen. What happened?

When you tap the Home button, the app currently in the foreground goes to the
background. When this happens, the operating system flash-freezes everything
currently in memory, including the strings in the names array. Similarly, when it’s
time to wake up and return to the foreground, the operating system restores what
used to be in memory as if you’d never left.

Apple introduced these advances in multitasking back in iOS 4. They create a


seamless experience for iOS users but add a wrinkle to the definition of persistence
for iOS developers. Are the names really persisted?

No, not really. If you had completely killed the app in the fast app switcher or
turned off your phone, those names would be gone. You can verify this, as well.
With the app in the foreground, double tap the Home button to enter the fast app
switcher, like so:

raywenderlich.com 24
Core Data by Tutorials Chapter 1: Your First Core Data App

From here, flick the HitList app snapshot upwards to terminate the app. There
should be no trace of HitList in living memory (no pun intended). Verify the names
are gone by returning to the home screen and tapping on the HitList icon to trigger
a fresh launch.

The difference between flash-freezing and persistence may be obvious if you’ve


worked with iOS for some time and are familiar with the way multitasking works. In
a user’s mind, however, there is no difference. The user doesn’t care why the
names are still there, whether the app went into the background and came back, or
because the app saved and reloaded them.

All that matters is the names are still there when the app comes back!

So the real test of persistence, is whether your data is still there after a fresh app
launch.

Modeling your data


Now you know how to check for persistence, you can dive into Core Data. Your goal
for the HitList app is simple: persist the names you enter so they’re available for
viewing after a fresh app launch.

Up to this point, you’ve been using plain old Swift strings to store the names in
memory. In this section, you’ll replace these strings with Core Data objects.

The first step is to create a managed object model, which describes the way Core
Data represents data on disk.

raywenderlich.com 25
Core Data by Tutorials Chapter 1: Your First Core Data App

By default, Core Data uses a SQLite database as the persistent store, so you can
think of the Data Model as the database schema.

Note: You’ll come across the word managed quite a bit in this book. If you see
“managed” in the name of a class, such as in NSManagedObjectContext, chances
are you are dealing with a Core Data class. “Managed” refers to Core Data’s
management of the life cycle of Core Data objects.
However, don’t assume all Core Data classes contain the word “managed”.
Actually, most don’t. For a comprehensive list of Core Data classes, check out
the Core Data framework reference in the documentation browser.

Since you’ve elected to use Core Data, Xcode automatically created a Data Model
file for you and named it HitList.xcdatamodeld.

Open HitList.xcdatamodeld. As you can see, Xcode has a powerful Data Model
editor:

raywenderlich.com 26
Core Data by Tutorials Chapter 1: Your First Core Data App

The Data Model editor has a lot of features you’ll explore in later chapters. For now,
let’s focus on creating a single Core Data entity.

Click on Add Entity on the lower-left to create a new entity. Double-click the new
entity and change its name to Person, like so:

You may be wondering why the model editor uses the term Entity. Weren’t you
simply defining a new class? As you’ll see shortly, Core Data comes with its own
vocabulary. Here’s a quick rundown of some terms you’ll commonly encounter:

• An entity is a class definition in Core Data. The classic example is an Employee or


a Company. In a relational database, an entity corresponds to a table.

• An attribute is a piece of information attached to a particular entity. For


example, an Employee entity could have attributes for the employee’s name,
position and salary. In a database, an attribute corresponds to a particular field
in a table.

• A relationship is a link between multiple entities. In Core Data, relationships


between two entities are called to-one relationships, while those between one
and many entities are called to-many relationships. For example, a Manager
can have a to-many relationship with a set of employees, whereas an
individual Employee will usually have a to-one relationship with his manager.

Note: You’ve probably noticed, entities sound a lot like a classes. Likewise,
attributes and relationships sound a lot like properties. What’s the difference?
You can think of a Core Data entity as a class definition and the managed
object as an instance of that class.

raywenderlich.com 27
Core Data by Tutorials Chapter 1: Your First Core Data App

Now you know what an attribute is, you can add an attribute to Person object
created earlier. Open HitList.xcdatamodeld. Next, select Person on the left-hand
side and click the plus sign (+) under Attributes.

Set the new attribute’s name to, er, name and change its type to String:

In Core Data, an attribute can be of one of several data types. You’ll learn about
these in the next few chapters.

Saving to Core Data


Open ViewController.swift, add the following Core Data module import below the
UIKit import:

import CoreData

This import is all you need to start using the Core Data API in your code.

Next, replace the names property definition with the following:

var people: [NSManagedObject] = []

raywenderlich.com 28
Core Data by Tutorials Chapter 1: Your First Core Data App

You’ll store Person entities rather than string names, so you rename the array
serving as the table view’s data model to people. It now holds instances of
NSManagedObject rather than simple strings.

NSManagedObject represents a single object stored in Core Data; you must use it to
create, edit, save and delete from your Core Data persistent store. As you’ll see
shortly, NSManagedObject is a shape-shifter. It can take the form of any entity in
your Data Model, appropriating whatever attributes and relationships you defined.

Since you’re changing the table view’s model, you must also replace both data
source methods implemented earlier. Replace your UITableViewDataSource
extension with the following:

// MARK: - UITableViewDataSource
extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return people.count
}

func tableView(_ tableView: UITableView,


cellForRowAt indexPath: IndexPath)
-> UITableViewCell {

let person = people[indexPath.row]


let cell =
tableView.dequeueReusableCell(withIdentifier: "Cell",
for: indexPath)
cell.textLabel?.text =
person.value(forKeyPath: "name") as? String
return cell
}
}

The most significant change to these methods occurs in


tableView(_:cellForRowAt:). Instead of matching cells with the corresponding
string in the model array, you now match cells with the corresponding
NSManagedObject.

Note how you grab the name attribute from the NSManagedObject. It happens here:

cell.textLabel?.text =
person.value(forKeyPath: "name") as? String

Why do you have to do this? As it turns out, NSManagedObject doesn’t know about
the name attribute you defined in your Data Model, so there’s no way of accessing it
directly with a property. The only way Core Data provides to read the value is key-
value coding, commonly referred to as KVC.

raywenderlich.com 29
Exploring the Variety of Random
Documents with Different Content
megérkezve, a színpadon – hogy annál nagyobb legyen a kísérteties
hangulat – bár az őrültségét csak fölötte hézagosan magyarázza
meg, hogy ő is elveszítette a maga kék küraszirját, akit kétszer látott:
először a bálteremben s másodszor, amikor a kék küraszirok a
halálba indulásuk előtt utóljára dáridóztak Bécsben; se az, hogy
azóta egy kissé megfürdött a posványban… És nincs mit szólni a
gyakornokról sem, aki ezt a másik leányt még a kék küraszirok
haláltánca előtt elhagyta a Moser-leányért és az egész darabon át
nem tudja megérteni, hogy ennek pedig ő nem kell, főképpen azért
nem, mert a betegápolásba idejekorán belefáradt nő nem kívánkozik
az erdő magánosságába. A néző se tudja megérteni, hogy ez a
gyakornok hogyan és miért került bele ebbe a darabba.
A fejlemények is csak valami hosszú epilógnak a minimumig
lemérsékelt hatását tehetik a nézőre. Hogy a kék kürasztirok mind
egy szálig áldozatául estek érthetetlen kiküldetésüknek és csodás
véletlenségből csak egy ember menekült meg közülök, éppen az, aki
– élnivágyásból – egyedül debachált a rendelés ellen, de ez az egy
is, szíves meglepetésül a nézőnek, modernül elmés
következetlenséggel, agyonlőtte magát, hogy doktor Schindler-
Mirákoló szamárnak deklarálhassa – már csak tudomásul szolgál,
mint a jegyzőkönyvekben szokás mondani. Hasonlóképpen: hogy
egy darab egyetlen maradi alakja, Richterné, Kata-Ophéliának az
anyja, továbbra is mindennap eljár a templomba.
A nézőt most már csak a Moser-leány sorsa érdekelheti. Tehát: a
kék küraszirja visszautasította azt a kivánságát, hogy haljanak meg
együtt; a katona elment a csatába, hogy büntetésül és példaadás
okából halhasson meg, a leány pedig egyedül nem tudott meghalni;
és minthogy Mirákoló mester azt a kis apagyilkossági ügyet
szerencsésen elsimította a hatóságok előtt, tovább él, virágot szed,
de nem tud felejteni. A jó Mirákoló, aki továbbra is atyailag
gondoskodik róla, azt a tanácsot adja neki, hogy ha már a szíve
ellenállhatatlanul a katonasághoz vonja, álljon be az egészségügyi
csapatokhoz betegápolónőnek. „De hát akkor miért öltem meg az
apámat?! – kérdhetné tőle Moser Mari – ha továbbra is
betegápolónőnek kell maradnom!“
És most már a szerző áll elő a maga meglepetésével. Kiderül
ugyanis a darab végén, hogy mindez azt a tanácsot kivánta
példázni, hogy: „Hallgassátok meg, amikor az élet szava hí
benneteket!“ Hát hiszen ezek mind hallgattak az élet szavára!… De
vajjon kívánatos-e az élet szavára hallgatni, ha ennek a
szófogadásnak ilyen gyors pusztulás, az apostoli igék áhítatos
hallgatóinak ilyen tömeges halála jár a nyomában?! („Majd szépen
fogunk hallgatni erre a hivogatásra!…“ – mondanák sokan
Budapesten.) De pardon!… „Félreértés!… – folytatja Schnitzler
doktor – Életnek én csak a szerelmi életet nevezem! És ennek az
igazi életnek egyetlen órájáért, az élet minden örömének egyetlen
éjszakába való belesűrűsítéséért érdemes feláldozni mindent, a
hosszú életet, a tartalom nélküli évek egész értéktelen sokaságát és
minden tekintetet, amelyeket komolyan szoktatok venni, amelyekért
közületek olyan sokan tartózkodnak az élet kéjeinek egyetlen
éjszakába való komprimálásától!“ Vagy úgy?! Az már más. Hanem
erről az Élet szava című drámából kissé bajos meggyőződni. Mert
Moser Mari a harmadik felvonásban csak egyetlen mondatban
nyilatkozik az éjszakájáról: „azután megértem üdvösséget, ahogy
soha nem is álmodtam, kétségbeesést, ahogy ember el nem
képzelheti… mi keresni valóm van még a földön?“ – de nem mondja,
hogy az az üdvösség fölért minden utána következő
kétségbeeséssel és hogy szívesen vállalja a hosszú kétségbeesést,
mint annak a rövid üdvösségnek az árát, váltságdíját. (Amint hogy a
véralkata szerint mindig különbözőképpen ítéli meg az ember, hogy
az élet örömeivel való sokféle gazdálkodás közül melyik a helyes; s
a legtöbb embernek erről minduntalan más-más a véleménye, a
körülményekhez képest.) Ahogy pedig Kata agyongyönyörködi
magát, az erősen hasonlít a sárba fulladáshoz; ez a kép se
meggyőző, még csak nem is csábító. De ne tünődjünk ezen
hosszan, mert mire lélekzetet vehetünk, Schnitzler doktor már maga
is ellentmond magának. Mégis csak jó életben maradni, mert: „Lássa
– mondja Schnitzler doktor Marinak – ma virágot szed az erdő
szélén és odanyújtja a homlokát a nyári szellőnek…“ „Maga él, Mari,
a többi csak volt. Amaz éjszaka és ama reggel óta is nappalok
következtek az éjszakára… virágot szed, a ragyogó déli égbolt alatt
beszél velem, stb., mindez élet… és ki tudja, nem fogja-e egyszer,
idővel, sokkal tisztábban és mélyebben hallani az élet szavát, mint
azon az éjjelen, mikor dolgokat élt át, melyek oly félelmes és izzó
nevűek, mint gyilkosság és szerelem?!…“ Tehát a hosszú élet, a
tartalom nélküli évek egész értéktelen sokasága se kutya?!… már
csak azért sem, mert még sokszor lehet hallani benne „az élet hívó
szavát“?! De hát melyik a választani való, amikor választani kell:
minden földi gyönyörűségnek egyetlen fenséges éjszakába való
komprimálása vagy a tartalom nélküli, de napsütéses és várandós
élet sokasága? Hiszen a darabjának erre a kérdésére kellene
felelnie!… hiszen a szerző maga vetette fel a kérdést!… De
Schnitzler doktor úgy felel a saját kérdésére, mint a fázódó és éhes
cigány, akitől azt kérdezték, hogy mit választ: melegedni akar-e
inkább, vagy enni? A legjobb – mondja – a tűznél szalonnát pirítani!
Bizonyára, de mintha tréfálna, mikor a maga kérdésére nem akar
felelni. Vagy maga se tudja, hogy tulajdonképpen mit kiván
mondani?!… Semmi különöset, csak egy kicsit kacérkodni óhajtott
az epikureizmussal és egyben az amoralista világfelfogással?!
Utoljára, mintha mégis jobban húzna a hosszú élethez, az akár
tartalom nélkül való, de nem reménytelen évek nem egészen
értéktelen sokaságához, mint az élvezeteknek huszonnégy órába
való kögítéséhez. Mert azt mondatja Schindler doktorral Marinak
Kata holttesténél: „Az, hogy én jó ember vagyok… hogy maga
gonosztevő… és hogy ez a halott bűnös volt… csak: szavak!
Magának még süt a nap és nekem… és azoknak (a gyerekekre
mutat, akik átszaladnak a réten). Ennek már nem. Más egyebet
semmi bizonyosat se tudok a világon! (Gyerekek nevetve szaladnak
át a réten és eltünnek az erdőben.)“ Vége.
Hát éppen ez az okoskodás – amelyet Schindler doktor
tanulságul bök ki a darab pointejének – az a valami, amire joggal
lehet elmondani, hogy csak: Szavak!… Üres beszéd!… Frivol játék a
gondolattal és a kifejezéssel!… Mert régi útszéli igazság, hogy kevés
a bizonyosságunk, de nem igaz, hogy az emberi elmének sok ezer
éves nyugtalansága teljességgel semmi eredményhez nem vezetett
volna s hogy mindazok a fogalmak, amelyekhez a jó és rossz
kérdése dolgában az emberek mindezidáig eljutottak: csupa fallácia.
Csakhogy arra, hogy ehhez a kérdéshez hozzászólhasson, Schitzler
Arthurban nincs meg a kellő komolyság. (1911 november.)
XLVI.

SCHÖNHERR.

Hit és haza.

Die Tragödie eines Volkes – ez az alcíme Schönherr Hit és haza


című színművének. Ezt Katona írhatta volna Bánk bánról. A
Schönherr darabja lehet mártirológia, de nem tragédia; még csak
nem is dráma.
Ennek a darabnak már a tárgyválasztása is kompromittálja
szerzőjét. Az ellenreformáció borzalmasságairól ír, tendenciózusan –
és ez magában véve is lemondatja a szerzőt a kifogástalan írói
szereplésről, mert vagy elmaradottságról, vagy rosszhiszeműségről
tesz bizonyságot. A vallásháborúk rettenetességei már századokkal
ezelőtt befejeződtek; akinek most jut eszébe gyászolni: az, ha
őszinte, későn született a világra. Ha pedig ez a tárgyválasztás a
felekezeti elfogultság érzéseire spekulál, úgy még inkább elítéli az
írót. Az inkvizició titkai, vagy más hasonló könyvekben felhatalmazott
rémségek csak kinyomtatott szószátyárság, de nem irodalom; csak
alsórendű propaganda-csinálás, de nem história írás.
Ezekről a dolgokról most már csakis a nyugodt, elfogulatlan,
pártatlan történetírásnak szabad beszélnie, amely nem ismer
tendenciát. És ha a történeti dráma írója elszakad a historikustól,
akkor elszakad az irodalomtól is. Schönherr darabja az említett
nyomtatványokra emlékeztet, amelyek kritika nélkül csoportosított
vádaskodások halmazát foglalják magukban, – amelyek a teljesen
tajékozatlanok között való hangulatcsinálásra törekednek azzal,
hogy szentírásként adják elő a meg nem vizsgált adatok közűl a
legritkábbakat.
De, noha Schönherr nem támaszkodhatik se az oknyomozó
történetírásra, se a köztudatra, fogadjuk el históriának mindazt, ami
nagyobb részben csak a képzeletéből sarjadzott, higyjük el, vita
nélkül, hogy az ellenreformáció az osztrák Alpes-vidéken csakugyan
elkövette mindazokat a borzalmasságokat, amelyekkel ez a darab
vádolja, s nézzük csak azt, hogy kétes eredetű adataiból milyen
drámát szerkesztett a szerző.
Sokáig azt hisszük: semmilyent. A darab elején felcsillan valami,
ami összeütközést, küzdelmet sejtet, de ennek az elkövetkezésére a
darab végéig várhatunk. Egy császári poroszló járja be a falvakat; a
megbizatása az, hogy minden olyan parasztot, aki Luther tanát
vallja, üldözzön ki az otthonából és térítsen tűzzel-vassal!… Ennek a
parancsnak a poroszló szörnyű kegyetlenséggel felel meg; csurog
róla a vér. A szerző, hogy kiélezze a tendenciát, hangsúlyozza, hogy
ez a véreb nem csupán megbízást teljesít, hanem egyszersmind
fanatizmusának a szenvedélyét elégíti ki. Volnának benne emberi
érzések; csak a vakbuzgósága teszi ilyen rémségesen kegyetlenné.
A dráma ott kezdődnék, hogy olyan parasztok közt, akik szívesen
eltitkolnák lutheránus hitüket, meggyőződésüket azért, hogy ne
kergessék ki őket az otthonukból, ne legyenek kénytelenek
elveszíteni a földjüket, hogy ott halhassanak meg, ahol születtek,
ennek a fiók-Arbueznek a rémtettei sok emberből kikényszerítik az
őszinte hitvallást. Egy Rott Kristóf nevű paraszt látszik a dráma
főalakjának; ez, mikor látja, hogy a véreb megöl egy asszonyt csak
azért, mert ez se élve, se halva nem akarja kiereszteni a Bibliát a
kezéből, lelkiismerete fellázadásában szint vall. Hát neki és az ő
népének is mennie kell. De az első felvonásban még meg se indul a
dráma s máris megreked; a főalak, Rott Kristóf, a darab végéig a
háttérbe szorúl, mert más parasztokat látunk, új, meg új parasztokat,
akikkel ugyanaz történik, fölötte csekély változattal, fölötte
egyhangúan újra meg újra ugyanaz. És mindezek az alakok, akik a
síralmas kántálás vezérszólamát egymástól átveszik, csupa
szánalomraméltó, tehetetlen áldozat, megannyi vértanú, megannyi
minden küzdelemre képtelen, eltiport porszem. Egyik se kelthet
részvétet, annyira porszemszerűen egyformák és passzivak. És
epizód epizódra következik; mindegyik majdnem egészen ugyanaz,
ami az előtte való; sehol semmi fordulat; plus ça change, plus c’est
la même chose. Mindez harmadfél felvonáson át.
Végül a szerző egyet gondol s a harmadik felvonás végén
megkezdődik a dráma, hogy mindjárt be is fejeződjék. A poroszlónak
el kell üldöznie a lutheránus parasztokat, de vissza kell tartania a
gyermekeket, mert ezeket még meg lehet téríteni. De Rott Kristóf fia,
a kis veréb, nem akar elszakadni szüleitől, s hogy megmeneküljön a
poroszlótól, beleugrik a patakba, de a sebes ár oda vágja a malom
kerekéhez s beleful a vízbe. Rott apai fájdalmában leteperi a
poroszlót s már agyonvágná a szekercéjével, de a poroszló azt
hörgi: „Szent Szűz, mint hű szolgád halok meg!“ Erre Rott, látva,
hogy a poroszló minden kegyetlenségét vakbuzgóságból cselekedte,
elereszti az embert és… kézfogással búcsúzik el tőle! A poroszló
pedig bámulva néz utána, mintha Jézus Krisztust látta volna és
széttöri a kardját. Hát ez a későn érkezett, miniatűr-dráma elrettentő
példánya a minden lélektani igazság nélkül való írói kieszelésnek;
cifra és nyilvánvaló hazugság – mert hiszen az annyira friss apai
fájdalom, amilyen a Rotté, nem lehet hajlandó arra a nyugodt
filozofálgatásra, amely a hasonló lelki átalakulás előfeltétele, nem
lehet hajlandó hasonló, nem is annyira humanizmusból vagy
evangéliumi érzületből, mint inkább történetfilozófiából eredő
rögtönös megbocsátásra, s azt a poroszlót, akit a Schönherr
darabjában láttunk, nem forgathatja ki egész gondolkozásvilágából a
valójában érthetetlen nagylelkűségi rohamnak semmiféle póza,
annál kevésbé az ilyen attitüd, amelyet csak századokkal később
tettek divatossá a Jockey-Clubok. És mindez szemmelláthatóan
csak azért, hogy a szerző tendenciájához híven azzal állhasson az
elképpedt néző elé, hogy lám, milyen dicséretesen előzte meg korát
ez az egyszerű paraszt!… lám, milyen nemeslelkűek voltak ezek a
vértanúk, akiket tűzzel-vassal irtottak!… lám, milyen gazságot csinált
az ellenreformáció!… Hát jól van, de mit csináljunk az
ellenreformációval, amelynek már úgyis olyan régen vége van?!
Hogy ez a tartalomtalan, sivár, írói verejtékszagú színdarab, –
amelynek minden érdeme: a gondos környezetrajz és bizonyos
ügyesség a jelenetek csoportosításában – Bécsben és Berlinben
kivételesen tetszett, ezen nem érdemes sokat tanakodni. Bécsben
nagyon szeretnék Schönherr Károlyt világhíres osztrák íróvá nevelni
vagy felfújni, ami érthető, mert ilyen már régóta nincsen. Berlinben
pedig még ma sem tudnak betelni azokkal a német vagy osztrák
parasztokkal, akik mintha csak a Zola Terrejéből tanultak volna
földéhséget, állatias földhözragadtságot és egyben romantikus
érzést, de különösen stílust. Berlinben tökéletesen elég a dialektus,
az ilyen tónus: „Bader, mein Bauch ist gespannt wie ein’ Trommel!
Nimm mir ’s Wasser, dass ich wieder schnaufen Kann!“… – hogy
sokan így ujjongjanak: „Ez, ez a színtiszta igazság! Voilà, la vraie
comédie!…“ Azután a berlini sikerben része lehetett a felekezeti
elfogultságnak is: korlátolt emberek mindenütt vannak a világon.
(1911 december.)
XLVII.

BARRIE.

Egyenlőség.

A legtöbb új színpadi munkának közös hibája, hogy minden


lelemény nélkül valók. Nagyon egyformák s nagyon egyhangúak. Az
egyik a másiknak jóformán csak variációja s tulajdonképpen nap-nap
után csupán annyi darabot látunk, ahány a műfaj. Van egy drámánk
s ennek száz mása; egy bohózatunk és ennek száz ikertestvére; egy
vígjátékunk és száz más hasonló; egy történelmi darabunk s ennek
száz, nem nagyon különböző kiadása és így tovább. Az ugyanegy
műfajhoz tartozó darabok untatóan hasonlítanak egymásra rokonok
a témáik, közösek a motívumaik, ugyanazok az alakjaik, egyforma a
tónusuk. Ebben az általános s már régibb eredetű monotoniában
szinte felfrissítően hat az olyan darab, amelyben van egy kis
lelemény is. Amelynek tárgya nem egy régi témának a századik
variánsa, hangja nem az untig megszokott, motívumai frissek és
eredetiek, figurái nem sablonosak. Barrie komédiájának a legfőbb
érdeme ebben a frisseségben rejlik, bár megemlíteni való az az
érdeme is, hogy nem nagyképű darab és mégis tartalmasabb sok
másnál, továbbá, hogy ami benne gondolatot kelt s hosszasabban
foglalkoztatja a néző képzeletét, gondolkozását, az nem cafrang a
darabon, hanem magának a cselekvésnek, a mesének a
kisugárzása, a darabban megelevenített helyzetek folyománya, a
színpadi képekből fakadó tanulság.
De főérdeme mégis csak a benne megnyilvánuló invenció, mely
megérzik motivumain, hangján, alakjainak színén és a tárgyán is.
Mert tévedés, – amit kritikaképpen mondtak róla, – hogy a tárgya
elcsépelt vagy legalább is igen ismeretes volna. Ez a tárgy nem
ismeretlen, nem új az elbeszélő irodalomban, de új a színpadon.
Színdarabnál pedig csak az számít, amit a színpadon láttunk vagy
látunk. A nem új ötletet színpadra vinni talán Columbus tojása volt,
de ilyen Columbus tojások találása a legritkább ügyesség.
Számítsuk ehhez, hogy Barrie friss és elmés motívumokat
szerepeltet, amelyek a tárgynak törvényes leszármazói; hogy
fantocheai mulatságosan eredetiek s hogy e vidám
fantazmegóriának a tónusa is, bár erősen emlékeztet az operett
tónusára, sajátos, nem közönséges és amellett a tárgynak
megfelelő.
Más kérdés ennek az invenciónak az irodalmi értéke. Ebből a
szempontból csak másodrendű és második kézből való leleményről
beszélhetünk. Az Egyenlőség egyike a számtalan robinzonádnak;
azoknak a munkáknak, amelyek De Foe alapötletét szőtték tovább;
amelyek Robinson nélkül sohase íródtak volna meg. Színpadon
talán az első robinzonád, de semmi esetre se olyan elsőrangú, olyan
nagy erejű fantázia alkotása, amilyen például maga a Robinsonról
szóló elbeszélés.
Az is kétségtelen, hogy ami a Barrie saját külön invencióját illeti,
ez – a tárgy természeténél fogva – jobban érvényesült volna egy
fantasztikus regény vagy hosszabb elbeszélés keretében. Néhol a
nézőnek az az impressziója, mintha egy hosszú és érdekes
részletekben gazdag történetnek négy színpadi képpé való
átdolgozásával volna dolga, amely színpadi képek jobban hatnának,
ha annak a hosszú históriának a legtöbb részlete nem maradna
ismeretlen előttünk. A szerző elsuhan olyan részletek mellett,
amelyek mögött mintha a kalandok egész sora rejtőznék.
Kár, hogy ezt a pompás anyagot nem regénnyé dolgozta fel. A
téma szinte kívánkozik a novellisztikus forma után; a tárgy
természete nem a nagy vonásokkal való festést, hanem a részletező
tárgyalást hozta volna magával. Maga a kissé felszínes filozoféma, –
hogy nincsen egyenlőség… hogy mindenütt szükség van
parancsolókra és olyanokra, akik csak engedelmeskednek… hogy a
természet ölén az lesz az úr, a király, aki a leginkább arra való, aki a
legtöbbet tudja és bírja… hogy a puszta szigeten leomlanak a
társadalmi választófalak s viszont a civilizált miliőben elfelejtődik
minden érdem s magától feltámad a társadalmi tagoltság, stb. – ez a
kissé szűk látókörre való tétel egyforma sikerrel tárgyalható
színdarabban és elbeszélésben, de az a mese, melyet Barrie tétele
illusztrálására választott, novellisztikus formát kivánna, ilyenben
sokkal hatásosabb volna.
Mert a komédiában, ahol nem láthatjuk, hogy a két esztendős
robinzonság hogyan formálja át az urakat és szolgákat lassanként
és fokozatosan egészen más emberekké, ahol – két képben,
mindössze néhány jelenet során – jóformán csak az eredményeket
láthatjuk, de nem magát az átalakulást, ahol a szolga robinzoni
értékét csak sejthetjük s az urak megszelídülését csak egy-egy
drasztikus vonás láttatja: az egymásra gyorsan következő, nagyon
változott helyzetek egy kissé meglepik a nézőt, az alakok kellő
megvilágítás híjján, minden új jelenetben újra és mindig
idegenszerűen hatnak, a cselekvés egyre többet veszít
valószerűségéből s az évek hatását rikítóan festő színpadi képek
operett-szcénákká válnak. Amint hogy ez a darab valójában operett
zene nélkül. Természetesen, a szónak jó értelmében. Vidám
persziflázs, melyben nem kell túlságosan komolyan venni se a
mesét, se az alakokat, könnyed persziflázs, mely azonban nincs
minden komolyság nélkül s melyet ügyesen szőtt mese, sok
jellemzetesség és még több ötlet tesz elevenné. (1904 január.)
XLVIII.

PINERO.

Ne váljunk el.

Arthur Pinero abban a darabjában, amelyet a Nemzeti Színház


Ne váljunk el címen mutatott be, két gondosan megrajzolt női alakot
vezet a néző elé. Az egyik női alak: a megtestesült féltékenykedés.
Az az asszony, aki annyira nem tud urává lenni a képzelődésének és
a véralkatának, hogy a legtürelmesebb férjet is kiugrasztja a pokollá
tett együttélésből, de örökkön lobogó féltékenységével, – melynek
tüzét tovább is táplálja folyvást nyugtalan, mindig izzó képzelete –
még azután is üldözi és gyötri szerencsétlen férjét, sőt nem csak
éppen ezt, hanem mindazokat, akik férjével valamelyes
összeköttetésbe keverednek. Ez a típus bizonyára nem új, de a
színpadon alighanem mindig új marad. És Pineronál a típus nagyon
egyéni és eleven alakká válik. Ez az Olive, akinek a féltékenykedése
még akkor is minduntalan fel-fellángol, amikor a legjobban fáradozik
azon, hogy kedvességével kibékítse és visszahódítsa a férjét, nem
olyan sablonosan beszél és cselekszik, mint ezer meg ezer színpadi
figura, amelyet lelkesen tapsolnak. És „könyörgő áriá“-jában,
amelyben megalázkodás és szemrehányás váltakozik, amelyben hol
elbájoltan turbékol, hol vércseként víjjong és esik neki egy-egy
szónak, aszerint, amint férje egyformán kedveskedő mondásaiban
hol csak hízelgést, hol új gyanakvást talál, többet is lelhetünk ügyes
műsorszámnál. Ha olyan szigorúan ítélünk, hogy Olive
féltékenykedésének a rajzát nagyon is könnyedvonalúnak találjuk,
mit mondjunk a mai drámaírásban szokásos jellemrajzolásról?!
Könnyedvonalú, talán azért, mert egy kissé vígjátéki marad s mert
nem juthat tragikus akcentusokhoz?! De hiszen csak így igaz és így
nem bántó a dolog, mert ne felejtsük el, hogy Olive
féltékenységének az alapja: az oktalanság, a kicsinyesség, a
magában való érthető bizalmatlanság és nem afféle nagyszerű
tévedés, aminő az Othellóé. És ha Olivenak a mentsége – amellyel
számot tarthat az érdeklődésünkre – az, hogy: ő maga is szenved,
amíg szenvedést okoz, sőt az ő szenvedései nagyobbak, mint
amelyeket másokra mér, a mentsége kisebb volna, ha az
oktalansága halálos sebeket okozna, ha az érzésében is
megnyilvánuló kicsinyesség megölné őt magát, vagy megölne
másokat.
A másik női alakkal szintén ismeretes típus jelenik meg Pinero
darabjában. (De hol vannak az új drámaírásban új alakok s
egyáltalán olyan új valami, ami nem puszta külsőség?!) Az az
asszony, aki nem tartja tiszteletben a konvenciókat s beérve
öntudatának a tisztaságával, túlteszi magát az apró
illemszabályokon, de ahhoz nem elég erős, hogy nyugalommal tudja
viselni ennek természetes következéseit, mert – ha nem is esik
kétségbe azon, hogy az egész világ megítéli, még a bíró is –
fájdalmat érez és egész lelkében megrendül, mikor azt látja, hogy a
férje kételkedni kezd benne. Pinero így egyéníti az ismeretes típust:
Theophila nem tud örömet találni azokban a falusi mulatságokban,
amelyek férjét vonzzák s nem tud a nagyvároson kívül élni (ami talán
hiba, de nem a durvább lelkű asszonyok hibája); elhagyatottságában
szívesen barátkozik John Allinghammel, akit feleségének a
féltékenykedése minduntalan kikerget az otthonából s bár nincs
köztük semmi egyéb, mint barátság, még azt is megengedi Johnnak,
hogy ez egyszer éjnek idején is ellátogasson hozzá, elpanaszolni a
házi bajait (aminek a megengedése kétségtelenül nagy
meggondolatlanság volt, de kevés „felvilágosodott“ vagy
„emancipált“ asszony van, aki sohase követ el semmi
könnyelműséget, úgy, hogy ezért a végzetes éjféli látogatásért
inkább Johnt kell hibáztatni); azután szinte hősies megadással viseli
el, hogy – amikor ezért az oktalanságért a féltékeny feleség a
biróság elé hurcolja – nemcsak „az egész világ“ elitéli s a környezete
is meggyanusítja, nem még a bíró is megbélyegzi, de a Nóra
elcsodálkozásával és kiábrándulásával látja, hogy a látszatot
megvető viselkedése férjének a bizalmát is megrendítette (ami
következetlenség ugyan, de először is nincs minden ráció nélkül,
mert a férjnek mindenkinél jobban kell ismernie a feleségét s azután
meg a szívnek néha több követelése van, mint az értelemnek); végül
Theo, miután Nóra példájára ott hagyta férjét, aki őt nem értette
meg, talán oda sodródnék, hogy csakugyan elkövesse azt, amivel a
biró is meggyanusította (mert csak bizonyíték hiányában mentette fel
a házasságtörés vádja alól), azért a hibájáért, hogy nem tudott ott
maradni folyton pöfékelő férjének az oldala mellett, a lehető
legkeményebben bűnhődik (mert semmisem lehet fájóbb az önérzet
és a hiúság sebeinél): meg kell szégyenülnie Allingham feleségével
szemben, akivel John időközben kibékült, azzal az asszonnyal
szemben, aki őt igazságtalanul vádolta és meghurcolta az egész
világ előtt, még a biróság előtt is.
Ha Theo s vele együtt Pinero nálunk elvesztette a perét, ennek a
főoka az lehet, hogy a mi közönségünk a John és Theo barátságára,
ami a bonyodalom kiinduló pontja, csak a legnagyobb szkepszissel
tudott gondolni. A mi közönségünk nem hiszi el, hogy fiatal férfi és
csinos nő közt barátság is lehetséges, nemcsak szerelem. Az ilyen
barátság csakugyan nem mindennapos jelenség s ha nálunk csak
hitetlenséggel találkozhatik, Angliában sem lehet megszokott valami,
hiszen az angol bíró se hisz Theonak az ártatlanságában. De az
angol néző Theo és John barátságát még se tekintheti olyan
képtelenségnek, aminőnek nálunk tűnt fel a nézők többsége előtt,
amely főképpen ezért fogadta hitetlenkedéssel Pinero meséjét. Ha
Pinero ilyes ritka viszonyra hivatkozik, ennek nálunk csak abban
találták meg valamelyes magyarázatát, hogy az angol férfi véralkata
kevésbé heves s az önuralma nagyobb, mint a kontinentális emberé,
a nő tehát, ha a szokottnál több bizalmasságot enged meg magának
a férfivel szemben, Angliában kevésbé provokálja a veszedelmet,
mint másutt bárhol. Pedig abban, hogy az angol nő átlagos
műveltsége jóval nagyobb, mint kontinentális versenytársaié, egy
második magyarázat is rejlik. Az az értelmi harmónia, mely a
barátság alapja, férfi és nő közt is könnyebben képzelhető el ott,
ahol a férfi és nő közt kisebb a szellemi távolság, mint ott, ahol a nő
megmaradt puszta szerelmi játékszernek s csak öltözködése
elegánciájával különbözik a kelet asszonyától. Pinero továbbá
hangsúlyozza ennek a szokatlan barátkozásnak az alkalmiságát. Ez
a férfi és nő – elmondja – azért keresik önkéntelenül egymás
barátságát, mert mind a kettő annak a bajnak az áldozatát látja a
másikban, amelyikben ő maga is laborál; és: solamen est miseris
socios habuisse malorum. A férfi, aki az otthon békéjére sóvárog s
akit felesége féltékenysége kiüldöz az otthonából, meg a nő, aki a
maga otthonának a levegőjét nem tudta megszokni s elhanyagoltnak
vagy „meg nem értett“-nek képzeli magát (mint annyi meg annyi nő!):
öntudatlanul keresik a vigasztalódást egymás társaságában vagy
inkább abban, hogy elbeszélgethetnek a közös bajról, melynek a
tárgyalása másokra nézve unalmas volna, őket pedig mindennél
jobban érdekli. És végül Pinero nem is mondja azt, hogy a
kényszerűségből társtalanná vált férfi és a kedve ellenére
társtalanná lett nő barátságába nem játszik bele a szerelmi
vonzódás. Ellenkezőleg, a meséje arra alludál, hogy ez a barátság
csak szerelemhez vezethetne, ha a viszálykodó házastársakat nem
kötné s nem vonná vissza erős érzés, kit-kit a maga párjához. Pinero
csak annyit mond, hogy se Theo, se John nem tudja, ha
barátkozásuk természetszerűen szerelmet csiráztat ki bennük; hogy
mind a kettő jóhiszemű, amikor azt képzeli, hogy csak a barátot
keresi a másikban. És ez talán nem olyan képtelenség, mint
amilyennek nálunk sokan látták.
Túlságosnak tűnik fel az a megütközés is, amely nálunk mintha
megpecsételte volna Pinero darabjának sorsát. Akik hihetetlennek
találták John és Theo barátságát, megbotránkoztak azon is, hogy
Theo elkeseredésében és izgalmában, egy kissé becsíp Johnnak a
lakásán, hogy annál inkább meg kelljen szégyenülnie Oliveval
szemben. Pedig Pinero ennek a magyarázatával nem marad adós.
Pineronak, ha nálunk nem is mindenki vette észre, igenis, van
tendenciája. Egy angol speciálitás, a „Crim. Con.“-pörök ellen izgat.
Ismeretes, hogy Angliában a törvény a házasságtörést, úgy a férfiét,
mint az asszonyét, súlyosan bünteti és hogy ebben a büntetésben
nem a legkevesebb: maga a tárgyalás. Az angol peres eljárás merev
formalizmusa, az a minuciózus gondosság, amellyel a bíró a
tényállás minden részletét a homályból kiásni és napfényre vinni
iparkodik, továbbá az a körülmény, hogy minden ilyen tárgyalás a
tanuk, szakértők és ügyvédek egész raját mozgósítja, tehát mindig
olyan nagy nyilvánosság előtt zajlik le, mint egy színházi előadás,
végül az, hogy okvetetlenül a legnagyobb botránnyal jár, mert az
angol prüdéria, a túlságosan szigorú közvélemény, a szenzációra
éhes újságok és újságolvasó tömeg számára egy „Crim. Con.“-per a
legédesebb csemege – az ilyen tárgyalást mindig rettenetes
torturává teszik a váldottra nézve. És ha Angliában a házastársak
egyike mindenáron bosszút akar állni a másikon vagy azon, akit a
házasélete feldúlásával gyanusít, mihelyt vélt igazában rászánja
magát, hogy megindítsa ezt a pert, akármibe kerül, mihelyt vállalja
azt a kockázatot, hogy egész vagyont kell fizetnie abban az esetben,
ha nem sikerül a vádját bebizonyítania, mert ez a tréfa mindig tenger
pénzbe kerül: akkor okvetlenül rettenetesen meg fogja gyötörni a
másikat és a harmadikat.
Nyilvánvaló, hogy a régi intézmény csak nagy vagyonú emberek
fejére zúdíthat bajokat. Hanem azért – ha a szegény emberre nézve
nincs is jelentősége a dolognak – az angol írók már régóta izgatnak
a „Crim. Con.“-pörök ellen. Pinero, mikor a reformot követelők
nyomába lép, a sok régi kifogás közül ezeket hangoztatja: 1.
Szörnyűség az ilyen per, mert a vádlottak közt ártatlanok is vannak s
az eljárás ezekre is olyan torturát mér, amely jóvátehetetlen s
amelyért semmisem adhat kárpótlást. 2. Szörnyűség, mert az eljárás
olyan részletekre is kiterjeszti a legnagyobb nyilvánosság előtt való
vizsgálódást és olyan módon szellőzteti a családi otthont, hogy ez a
lelki motozás az ártatlant is megbélyegzi. A felmentés esetében is
semper aliquid haeret. És a bírónak nem lehet feladata, hogy
gyanussá tegye olyan nők hírnevét, akikre semmi rosszat sem tud
rábizonyítani. A bíró kételkedése gyanakvást kelthet olyan
családtagokban, akik előbb nem gyanakodtak, a botrány
lehetetlenné teheti olyanok együttélését, akiket az érzéseik
egymásra utalnak; a bírónak nem lehet feladata bizalmatlanságot
kelteni, amikor a női tisztességről van szó és nem lehet tiszte egy
minden perköltség fizetésére kész vádló kedvéért feldúlni családok
életét. 3. És a fődolog: ez a kegyetlen eljárás, mely százezer
kiváncsinak enged bepillantást a családi élet szentélyébe, mely az
otthont úgy kutatja át, mint egy orgazda barlangját, mely a
legnagyobb nyilvánosság előtt firtatja a nő szemérméhez tartozó
dolgokat – demoralizál. Éppen annyira, mintha a megvádolt ártatlan
nőt pőrére vetkőztetnék le a sokaság előtt. Mint a nagy Galeotto, ez
a hatósági lélek- és testmotozás is annak elkövetéséhez hajthatja az
ártatlant, – mert ez már úgyis beszennyezettnek látja magát, –
aminek az elkövetésével előbb igazságtalanul vádolták. Ez nem
lehet feladata az igazságszolgáltatásnak.
Pinero nem juttatja idáig hősnőjét s ha jelzi hogy Theo is erre az
útra kerülhet, rajta van, hogy minél több mentséget keressen Theo
számára. A főmentséget persze Theo rosszul titkolt nagy
érzékenységében, elkeseredésében, vigasztalanságában és
reményvesztettségében találja meg; de nem tartja feleslegesnek az
alkalmi mentséget sem s azt hiszi, hogy Theo legelső nagy
felizgultságában juthat legkönnyebben veszedelembe, kivált ha
keserű érzésének, bánatának és idegességének legyőzése végett,
anélkül, hogy észrevenné, mit csinál, a „szíverősítő“ narkotikumához
téved. Azon való megütődésünket, hogy az előkelő angol hölgy itt a
Falu rosszával találkozik, mérsékelheti annak a tudata, hogy az
antialkoholizmus – talán legkivált a klimatikus viszonyok
következéseképpen – Angliában hódít a leglassabban, hogy a
szigetlakók előkelői jobban rabjai maradtak az ivásnak, mint a
kontinensen lakó kiváltságosok és hogy angol földön régidő óta a
nők között is – még a felsőbb körök asszonyait sem véve ki –
elterjedtebb ez a szenvedély, mint másutt. Angol néző, mert nem
talál benne valami nagyon szokatlant, nem is akad fenn Theonak a
becsípettségén és annak találja ezt, aminek Pinero szánta:
mentségnek, nem pedig súlyosbító körülménynek, mint mi.
Ez csak egyik s talán legburleszkebb példája annak, hogy ami
Pinero darabjában a londoni közönségnek igen tetszhetett, az
nálunk fonákul hatott; de több ilyen példát lehetne felsorolni. Az
angol ember százados intézmények és hagyományos szokások ma
is hatalmas erejénél fogva sokban különbözik attól az átlagos
európaitól, akit mi megismertünk, megszoktunk. És minél
speciálisabban angol figurákat visz Pinero a színpadra (már pedig
ma jóformán ő az egyetlen angol drámaíró, aki színdarabjaiban
igazán angol életet rajzol): a mi közönségünk annál kevesebb
megértéssel, annál hidegebben áll vele szemben.
Kár. Mert tagadhatatlan ugyan, hogy Pinero darabjában maga a
dráma kissé szegényes, hiszen csak a második felvonás nagyjára
szorítkozik s mindössze néhány szép jelenetet foglal le – de hol
vannak az új színműirodalomban azok a drámák, amelyek
fordulatosságban gazdagabbak és ehhez a gazdagsághoz nem a
pszichológiai igazság rovására jutnak el?! Az is vitathatlan, hogy
Pinero ebben a darabjában, kevés színpadi ügyességet fejtve ki, a
novella-író módjára dolgozta ki témáját, mert egy hosszú felvonás
alatt se tud elkészülni az expoziciójával, sok időt pazarol el a puszta
jellemzésre és az unalmasságig hosszadalmasan állapítja meg
vékonyka drámájának az antecedenciáit: mindamellett ez a darab
több figyelmet érdemelt volna, mint aminőben nálunk részesült. Mert
– ami a mai színműirásban már ritkaság – igazi emberek
szerepelnek benne, akik úgy beszélnek és úgy cselekesznek, ahogy
az életben szokás. (1913 január.)
XLIX.

SHAW.

Nem lehessen tudni.

Crampton úr valaha olyan nőt vett feleségül, aki nem szerette őt.
Bár az asszony a fajfentartáshoz a szerelmet fölöslegesnek tartja,
férjének azt a bűnét, hogy őt a feleségévé tette, jónak látja minden
rendelkezésére álló eszközzel megtorolni. Nemcsak hogy a
legteljesebben kielégíti önállóságra törő hajlamait, nemcsak hogy a
közéleti szereplésnek él és szónoklatokat tart a nők jogairól, hanem
üres óráiban azzal szórakozik, hogy agyonbosszantja a férjét. Mikor
már három gyermekük van, Crampton úrnak elfogy a türelme és
megszökik a családjától. Nyugodt lelkiismerettel teszi ezt, mert a
felesége is gazdag. Az asszony elköltözik Madeirába s itt a maga
elveinek szellemében, exotikus nevelésben részesíti a gyermekeit,
akik exotikus állatkákká növekednek fel. Tizennyolc év telik el így.
Végre az asszony, aki férje eltűnése óta a leánykori nevét használja,
a gyermekeivel egy angolországi fürdőhelyre utazik s ott a családot
egy kacskaringós véletlen összehozza Cramptonnal.
A kisebbik leánynak ugyanis megfájul a foga s egy ifjú,
éhenkórász fogorvoshoz kerülnek, akit meghívnak ebédre. A derék
ifjú, aki különben sem tudja fékezni azt a mániáját, hogy folytonosan
locsoghasson-fecseghessen, annyival inkább szeretné elfogadni a
meghívást, mert nyomban beleszeretett a nagyobbik kisasszonyba s
az egész családról szerteáradó gazdagság-illatba, de malőrje van
szegénynek. A háziura, akinek már jókora összegű házbérrel
tartozik, szintén aznap huzatta ki vele a fogát s a háziura is meghívja
ebédre, ugyanakkorra, amikorra amazok. A Buridán szamárnak
szituációjában lévő, mindenkit elbájoló éhenkórász nem meri
visszautasítani háziurának a meghívását s a nagyérdekességű
bonyodalmat csak úgy véli megoldhatónak, ha a háziura is a
madeirai családnál fog ebédelni. A háziúr se talál más kivezető utat
a nehéz esetből, mint hogy a kellemes fogorvos kedvéért megegye
az ismeretlen család ebédjét.
A háziúr persze éppen Mr. Crampton. Mikor ez a gentleman
észreveszi, hogy hová jutott, az első percben el akar illanni, de
utóbb, gyermekeinek láttán, valami nosztalgia-féle fogja el a családi
élet után. Tulajdonképpen maga se tudja, hogy mit akar, de azért
diadalmasan versenyezve a legtürelmesebb szamárral, végigvárja
ezt a felvonást. Nos ahogyan a kedves család a véletlenül előkerült
férjet és apát fogadja, az már nem farsangi tréfa, nem is
kutyakomédia, hanem valóságos szaturnália. Pedig kivált a
gyerekeknek, ezeknek a talán nem is Madeirából, hanem a Fidzsi-
szigetekről érkezett infámis kölyköknek semmi egyéb okuk nincs az
apjukkal cudarkodniok, csak az, hogy kitálalhassák, mennyire
kiállhatatlanok tudnak lenni, milyen borzasztóan neveletleneknek
nevelte őket az anyjuk, és hogy mennyivel alávalóbbak tudnak lenni
a gazdagság minden kényelmében élő, jól öltözött fiatal lények a
kannibál-gyerekeknél vagy növekedni kezdő párduc-ivadékoknál.
Mintha valami perverz gyönyörűséget találnának annak
exhibiciójában, hogy mekkora szemtelenségre képesek és milyen
magasfokú utálatosságot tudnak kifejteni. Crampton pedig ahelyett,
hogy visszafutballozná őket Madeira kapujába, szelíden
elégedetlenkedik velök vagy babuskálja őket.
Eközben a nézőnek végig kell hallgatnia, hogy dr. Valentine, aki
alighanem egy madeirai borbélyműhelyben végezte a fogászati
tanulmányait, micsoda szóáradattal vall szerelmet, a „szerelem“ szó
használata nélkül, de nem csupa e vagy i hangzó alkalmazásával, a
„szerelem“ szótól iszonyodó és különben rendkívül együgyű Glória
kisasszonynak. Azonkívül végig kell néznie egy Pry Pál-szerűen
minden lében kanál, tűrhetetlenül konfidens és szánalmas
életbölcsességeket kenetesen szónokolgató pincérnek a színpadon
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

textbookfull.com

You might also like