Dick’s Sporting Goods
Manami Maehama
Professor Martin
Horizontal & Vertical Analysis
Balance Sheet
Cash & Short Term Investments
Cash and Short Term investments is the sum of two balance sheet line items: cash
and equivalents and short term investments in marketable securities.
3 ways to improve:
1. Lease, Don’t Buy.
2. Offer Discounts on Loans
3. Conduct Customer Credit Checks
Assets Horizontal
2016 2017 2018 2019 2020 2021
119M (39%) 165M (-39%) 101M (13%) 114M (-39%) 70M (-6.5%) 69M
Total Accounts Receivable
Total Accounts receivable is the balance of money due to a firm for goods or
services delivered or used but not yet paid for by customers.
3 ways to improve :
1. Move fast on past-due receivables.
2. Consider offering an early payment discount
3. Consider offering a payment plan
ASSET Horizontal
2016 2017 2018 2019 2020 2021
67M (16%) 78M (-17%) 65M (-32%) 44M (34%) 59M (0.25%) 59M
Inventories
Inventory is the term for the goods available for sale and raw materials used to
produce goods available for sale.
3 ways to improve :
1. Avoid dead stock.
2. Save on storage costs
3. Regular auditing
ASSET Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B
Total Current Assets
Total current assets represent all the assets of a company that are expected to be conveniently
sold, consumed, utilized or exhausted through the standard business operations, which can lead to
their conversion to a cash value over the next one year period.
3 ways to improve :
1. Pay off Current Liabilities.
2. Sell-off Unproductive Assets.
3. Improve Current Asset by Rising Shareholders Funds
ASSET Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B
Net Property, Plant & Equipment
Net Property, Plant, and Equipment is the value of all buildings, land, furniture, and
other physical capital that a business has purchased to run its business.
3 ways to improve :
1. Ins and outs of depreciation
2. Use an accelerated method that takes most most of the depreciation up front
3. Subtract depreciation over time
ASSET Horizontal
2016 2017 2018 2019 2020 2021
1B (100%) 2B (0%) 2B (0%) 2B (100%) 4B (50%) 5B
Intangible Assets
An intangible asset is an asset that is not physical in nature.
3 ways to improve:
1. Identify Your Intangible Asset
2. Standardize Systems and Processes
3. Develop Your Intangibles
ASSET Horizontal
2016 2017 2018 2019 2020 2021
310M (24%) 385M (0.5%) 387M (-2%) 380M (-10%) 340M (3%) 340M
Net Goodwill
Goodwill is an intangible asset that is associated with the purchase of one
company by another.
3 ways to improve:
1. Cash-Flow Statement Basics
2. Investing Cash Flow
3. Financing Cash Flow
ASSET Horizontal
2016 2017 2018 2019 2020 2021
200M (23%) 245M (2%) 250M (0%) 250M (-2%) 245M (6%) 245M
Other Assets
Other assets are a grouping of accounts that are listed as a se.
1. Dick’s Sporting Goods
Manami Maehama
Professor Martin
Horizontal & Vertical Analysis
Balance Sheet
Cash & Short Term Investments
Cash and Short Term investments is the sum of two balance
sheet line items: cash
and equivalents and short term investments in marketable
securities.
3 ways to improve:
1. Lease, Don’t Buy.
2. Offer Discounts on Loans
3. Conduct Customer Credit Checks
Assets Horizontal
2016 2017 2018 2019 2020 2021
119M (39%) 165M (-39%) 101M (13%) 114M (-39%) 70M (-
6.5%) 69M
Total Accounts Receivable
Total Accounts receivable is the balance of money due to a firm
2. for goods or
services delivered or used but not yet paid for by customers.
3 ways to improve :
1. Move fast on past-due receivables.
2. Consider offering an early payment discount
3. Consider offering a payment plan
ASSET Horizontal
2016 2017 2018 2019 2020 2021
67M (16%) 78M (-17%) 65M (-32%) 44M (34%) 59M (0.25%)
59M
Inventories
Inventory is the term for the goods available for sale and raw
materials used to
produce goods available for sale.
3 ways to improve :
1. Avoid dead stock.
2. Save on storage costs
3. Regular auditing
ASSET Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B
3. Total Current Assets
Total current assets represent all the assets of a company that
are expected to be conveniently
sold, consumed, utilized or exhausted through the standard
business operations, which can lead to
their conversion to a cash value over the next one year period.
3 ways to improve :
1. Pay off Current Liabilities.
2. Sell-off Unproductive Assets.
3. Improve Current Asset by Rising Shareholders Funds
ASSET Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B
Net Property, Plant & Equipment
Net Property, Plant, and Equipment is the value of all buildings,
land, furniture, and
other physical capital that a business has purchased to run its
business.
3 ways to improve :
1. Ins and outs of depreciation
2. Use an accelerated method that takes most most of the
depreciation up front
3. Subtract depreciation over time
ASSET Horizontal
4. 2016 2017 2018 2019 2020 2021
1B (100%) 2B (0%) 2B (0%) 2B (100%) 4B (50%) 5B
Intangible Assets
An intangible asset is an asset that is not physical in nature.
3 ways to improve:
1. Identify Your Intangible Asset
2. Standardize Systems and Processes
3. Develop Your Intangibles
ASSET Horizontal
2016 2017 2018 2019 2020 2021
310M (24%) 385M (0.5%) 387M (-2%) 380M (-10%) 340M
(3%) 340M
Net Goodwill
Goodwill is an intangible asset that is associated with the
purchase of one
company by another.
3 ways to improve:
1. Cash-Flow Statement Basics
2. Investing Cash Flow
3. Financing Cash Flow
5. ASSET Horizontal
2016 2017 2018 2019 2020 2021
200M (23%) 245M (2%) 250M (0%) 250M (-2%) 245M (6%)
245M
Other Assets
Other assets are a grouping of accounts that are listed as a
separate line item in
the assets section of the balance sheet.
3 ways to improve:
1. Find new sources of income
2. Get out of debt
3. Spend less
ASSET Horizontal
2016 2017 2018 2019 2020 2021
83M (30%) 108M (11%) 120M (-12%) 106M (26%) 134M
(14%) 152M
Tangible Other Assets
Tangible assets include both fixed assets, such as machinery,
buildings and land, and
current assets, such as inventory.
3 ways to improve:
6. 1. A high net tangible assets value can serve as a cushion
against uncertainty that can
take place in the market and help to support a company’s stock
price.
2. Determining this value helps to find out if the market share
price of a company is
overvalued or undervalued.
3. As tangible current assets can easily be converted into cash,
they provide liquidity to
the business and, thus, reduce risk
ASSET Horizontal
2016 2017 2018 2019 2020 2021
83M (30%) 108M (11%) 120M (-12%) 106M (26%) 134M
(14%) 152M
Total Assets
Total assets refers to the total amount of assets owned by a
person or entity.
3 ways to improve:
1. Reduce asset base
2. Improve Productivity And Lower Costs
3. Increase Sales Revenue
ASSET Horizontal
2016 2017 2018 2019 2020 2021
11. 134M (2%) 3%
Total Assets
2016 2017 2018 2019 2020
4B 4B 4B 4B 7B
Tangible Other
Assets
ST Debt & Current Portion LT Debt
The current portion of long-term debt is the amount of principal
that will be due within one year of
the date of the balance sheet. This amount is reported on the
balance sheet as one of the
company's current liabilities.
3 ways to improve:
1. A company can keep its long-term debt from ever being
classified as a current liability by
periodically rolling forward the debt into instruments with
longer maturity dates and balloon
payments.
2. Pay debts back on time
3. Stop creating more debt
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
589,000
(10%)
12. 646,000
(67%)
5M (0%) 5M (83%) 423M (40%) 592M
Accounts Payable
Money owed by a company to its creditors.
3 ways to improve:
1. Go paperless when possible
2. Look for discounts
3. Standardize your accounts payable workflow process
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
678M (12%) 756M (12%) 843M (6%) 890M (12%) 1B (11%)
110M
Income Tax Payable
Income tax payable is a type of account in the current liabilities
section of a
company's balance sheet. It is compiled of taxes due to the
government within one
year.
3 ways to improve:
1. Open an interest-bearing bank account
13. 2. Skip some of the credits for which you are eligible
3. Accelerate advanced payments in the current year instead of
delaying
payment until the next tax year.
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
68M (26%) 86M (-60%) 34M (15%) 39M (-74%) 10M (-93%)
700,000
Other Current Liabilities
Other Current Liabilities are categories of short-term debt that
are lumped together
on the balance sheet.
3 ways to improve: to reduce
1. Sell unnecessary assets
2. Factor invoices
3. Use investments or cash to pay off loans
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
445M (25%) 555M (-2%) 543M (5%) 570M (13%) 641M (10%)
705M
Miscellaneous Current Liabilities
14. Miscellaneous Current Liabilities is an account for current
liabilities that do not fall
into any of the categories already defined.
3 ways to improve: to reduce
1. Reduce costs
2. Increase income
3. Restructure liabilities
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
350M (19%) 418M
(-0.2%)
417M (-3%) 405M (58%) 641M (18%) 756M
Total Current Liabilities
Total Current Liabilities are the claims to the company's assets
that are due within
one year or the cycle of operations.
3 ways to improve:
1. Restructure assets
2. Raise more capital
3. Exit the business
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
15. 1B (0%) 1B (0%) 1B (100%) 2B (0%) 2B (25%) 2.5B
Long Term Debt
Long Term Debt is any amount of outstanding debt a company
holds that has a
maturity of 12 months or longer.
3 ways to improve: to reduce
1. Increase profitable sales
2. Sell assets and lease them back
3. Bring in an investor
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
5M(0%) 5M (1100%) 60M (-8%) 55M
(5355%)
3B (1612%) 51B
Deferred Taxes-Debit
Corporate bookkeepers debit an asset account to increase its
value and credit the
account to reduce its worth.
3 ways to improve:
1. Try to stop losses from operations
2. Pay the taxes
3. Use the straight line method
16. Liabilities Horizontal
2016 2017 2018 2019 2020 2021
6M(667%) 46M (-67%) 14M (-7%) 13M (8%) 14M (150%) 35M
Other Liabilities
Other Liabilities are all miscellaneous obligations that a
company lumps together
on financial statements.
3 ways to improve:
1. Sell unnecessary assets
2. Convert necessary assets into liabilities
3. Factor invoices
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
175M (11%) 195M (9%) 213M (-5%) 203M(-34%) 134M (-5%)
127M
Total Liabilities
Total liabilities are the aggregate debt and financial obligations
owed by a
business to individuals and organizations at any specific period
of time.
3 ways to improve:
21. by Jack Nutting, Fredrik Olsson, David Mark and Jeff LaMarche
Apress. (c) 2014. Copying Prohibited.
Reprinted for Personal Account, American Public University
System
[email protected]
Reprinted with permission as a subscription benefit of Skillport,
All rights reserved. Reproduction and/or distribution in whole
or in part in electronic,paper or other forms without written
permission is prohibited.
Chapter 3: Handling Basic Interaction
Overview
Our Hello, World application was a good introduction to iOS
development using Cocoa Touch, but it was missing a crucial
capability—the ability to interact with the user.
Without that, our application is severely limited in terms of
what it can accomplish.
In this chapter, we're going to write a slightly more complex
application—one that will feature two buttons as well as a label
(see Figure 3-1). When the user taps either of
the buttons, the label's text will change. This may seem like a
rather simplistic example, but it demonstrates the key concepts
involved in creating interactive iOS apps.
Just for fun, we're also going to introduce you to the
NSAttributedString class, which lets you use styled text with
many CocoaTouch GUI elements.
22. Figure 3-1: The simple two-button application we will build in
this chapter
The Model-View-Controller Paradigm
Before diving in, a bit of theory is in order. The designers of
Cocoa Touch were guided by a concept called Model-View-
Controller (MVC), which is a very logical way of
dividing the code that makes up a GUI-based application. These
days, almost all object-oriented frameworks pay a certain
amount of homage to MVC, but few are as
true to the MVC model as Cocoa Touch.
The MVC pattern divides all functionality into three distinct
categories:
Model: The classes that hold your application's data.
View: Made up of the windows, controls, and other elements
that the user can see and interact with.
Controller: The code that binds together the model and view. It
contains the application logic that decides how to handle the
user's inputs.
The goal in MVC is to make the objects that implement these
three types of code as distinct from one another as possible.
Any object you create should be readily
identifiable as belonging in one of the three categories, with
little or no functionality that could be classified as being either
of the other two. An object that implements a
button, for example, shouldn't contain code to process data
when that button is tapped, and an implementation of a bank
account shouldn't contain code to draw a table
23. to display its transactions.
MVC helps ensure maximum reusability. A class that
implements a generic button can be used in any application. A
class that implements a button that does some
particular calculation when it is clicked can be used only in the
application for which it was originally written.
When you write Cocoa Touch applications, you will primarily
create your view components using a visual editor within Xcode
called Interface Builder, although you will
also modify, and sometimes even create, your user interfaces
from code.
Your model will be created by writing Objective-C classes to
hold your application's data or by building a data model using
something called Core Data, which you'll learn
about in Chapter 13. We won't be creating any model objects in
this chapter's application because we do not need to store or
preserve data. However, we will introduce
model objects as our applications get more complex in future
chapters.
Your controller component will typically be composed of
classes that you create and that are specific to your application.
Controllers can be completely custom classes
(NSObject subclasses), but more often they will be subclasses
of one of several existing generic controller classes from the
UIKit framework, such as UIViewController
(as you'll see shortly). By subclassing one of these existing
classes, you will get a lot of functionality for free and won't
need to spend time recoding the wheel, so to
speak.
As we get deeper into Cocoa Touch, you will quickly start to
see how the classes of the UIKit framework follow the
24. principles of MVC. If you keep this concept in the back
of your mind as you develop, you will end up creating cleaner,
more easily maintained code.
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 2 of 16
Creating Our Project
It's time to create our next Xcode project. We're going to use
the same template that we used in the previous chapter: Single
View Application. By starting with this
simple template again, it will be easier for you to see how the
view and controller objects work together in an iOS application.
We'll use some of the other templates in
later chapters.
Launch Xcode and select File New Project… or press N. Select
the Single View Application template, and then click Next.
You'll be presented with the same options sheet that you saw in
the previous chapter. In the Product Name field, type the name
of our new application, Button Fun. The
Organization Name, Company Identifier, and Class Prefix fields
should still have the values you used in the previous chapter
(Apress, com.apress, and BID), so you can
leave those alone. Just as we did with Hello, World, we're going
to write an iPhone application, so select iPhone for Devices.
Figure 3-2 shows the completed options
sheet.
25. Figure 3-2: Naming your project and selecting options
Hit Next, and you'll be prompted for a location for your project.
You can leave the Create git repository checkbox checked or
unchecked, whichever you prefer. Save the
project with the rest of your book projects.
Looking at the View Controller
A little later in this chapter, we'll design a view (or user
interface) for our application using Interface Builder, just as we
did in the previous chapter. Before we do that,
we're going to look at and make some changes to the source
code files that were created for us. Yes, Virginia, we're actually
going to write some code in this chapter.
Before we make any changes, let's look at the files that were
created for us. In the project navigator, the Button Fun group
should already be expanded; but if it's not,
click the disclosure triangle next to it (see Figure 3-3).
Figure 3-3: The project navigator showing the class files that
were created for us by the project template. Note that our class
prefix was automatically incorporated into
the class file names
The Button Fun folder should contain four source code files (the
ones that end in .h or .m) along with a storyboard file and an
asset catalog for containing any images
our app needs. The four source code files implement two classes
that our application needs: our application delegate and the
view controller for our application's only
view. Notice that Xcode automatically added the prefix we
26. specified to all of our class names.
We'll look at the application delegate a little later in the
chapter. First, we'll work with the view controller class that was
created for us.
The controller class called BIDViewController is responsible
for managing our application's view. The BID part of the name
is derived automatically from the class prefix
we specified, and the ViewController part of the name identifies
that this class is, well, a view controller. Click
BIDViewController.h in the Groups & Files pane, and take
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 3 of 16
a look at the contents of the class's header file:
#import <UIKit/UIKit.h>
@interface BIDViewController : UIViewController
@end
Not much to it, is there? BIDViewController is a subclass of
UIViewController, which is one of those generic controller
classes we mentioned earlier. It is part of the
UIKit framework, and by subclassing this class, we get a bunch
of functionality for free. Xcode doesn't know what our
application-specific functionality is going to be, but
27. it does know that we're going to have some, so it has created
this class for us to write that application-specific functionality.
Understanding Outlets and Actions
In Chapter 2, you used Xcode's Interface Builder to design a
simple user interface. A moment ago, you saw the shell of a
view controller class. There must be some way
for the code in this view controller class to interact with the
objects in the storyboard, right?
Absolutely! A controller class can refer to objects in a
storyboard or nib file by using a special kind of property called
an outlet. Think of an outlet as a pointer that points
to an object within the user interface. For example, suppose you
created a text label in Interface Builder (as we did in Chapter 2)
and wanted to change the label's text
from within your code. By declaring an outlet and connecting
that outlet to the label object, you would then be able to use the
outlet from within your code to change the
text displayed by the label. You'll see how to do just that in this
chapter.
Going in the opposite direction, interface objects in our
storyboard or nib file can be set up to trigger special methods in
our controller class. These special methods are
known as action methods (or just actions). For example, you can
tell Interface Builder that when the user taps a button, a specific
action method within your code
should be called. You could even tell Interface Builder that
when the user first touches a button, it should call one action
method; and then later, when the finger is lifted
off the button, it should call a different action method.
Xcode supports multiple ways of creating outlets and actions.
One way is to specify them in our source code before using
28. Interface Builder to connect them with our
code. Xcode's assistant view gives us a much faster and more
intuitive approach that lets us create and connect outlets and
actions in a single step, a process we're
going to look at shortly. But before we start making
connections, let's talk about outlets and actions in a little more
detail. Outlets and actions are two of the most basic
building blocks you'll use to create iOS apps, so it's important
that you understand what they are and how they work.
Outlets
Outlets are special Objective-C class properties that are
declared using the keyword IBOutlet. Declaring an outlet is
done either in your controller's class header file or
in a special section (called the class extension) of your
controller's implementation file. It might look something like
this:
@property (weak, nonatomic) IBOutlet UIButton *myButton;
This example is an outlet called myButton, which can be set to
point to any button in Interface Builder.
The IBOutlet keyword isn't built into the Objective-C language.
It's a simple C preprocessor definition in a system header file,
where it looks something like this:
#ifndef IBOutlet
#define IBOutlet
#endif
Confused? IBOutlet does absolutely nothing as far as the
compiler is concerned. Its sole purpose is to act as a hint to tell
Xcode that this is a property that we're going
to want to connect to an object in a nib file. Any property that
29. you create and want to connect to an object in a nib file must be
preceded by the IBOutlet keyword.
Fortunately, Xcode will now create outlets for us automatically.
Outlet Changes
Over time, Apple has changed the way that outlets are declared
and used. Since you are likely to run across older code at some
point, let's look at how outlets have
changed.
In the first version of this book, we declared both a property
and its underlying instance variable for our outlets. At that
time, properties were a new construct in the
Objective-C language, and they required you to declare a
corresponding instance variable:
@interface MyViewController : UIViewController
{
UIButton *myButton;
}
@property (weak, nonatomic) UIButton *myButton;
@end
Back then, we placed the IBOutlet keyword before the instance
variable declaration:
IBOutlet UIButton *myButton;
This was how Apple's sample code was written at the time. It
was also how the IBOutlet keyword had traditionally been used
in Cocoa and NeXTSTEP.
By the time we wrote the second edition of the book, Apple had
moved away from placing the IBOutlet keyword in front of the
instance variable, and it became standard
30. to place it within the property declaration:
@property (weak, nonatomic) IBOutlet UIButton *myButton;
Even though both approaches continued to work (and still do),
we followed Apple's lead and changed the book code so that the
IBOutlet keyword was in the property
declaration rather than in the instance variable declaration.
When Apple switched the default compiler from the GNU C
Compiler (GCC) to the Low Level Virtual Machine (LLVM)
recently, it stopped being necessary to declare
instance variables for properties. If LLVM finds a property
without a matching instance variable, it will create one
automatically. As a result, in this edition of the book,
we've stopped declaring instance variables for our outlets
altogether.
All of these approaches do exactly the same thing, which is to
tell Interface Builder about the existence of an outlet. Placing
the IBOutlet keyword on the property
declaration is Apple's current recommendation, so that's what
we're going to use. But we wanted to make you aware of the
history in case you come across older code
that has the IBOutlet keyword on the instance variable.
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 4 of 16
You can read more about Objective-C properties in the book
31. Learn Objective-C on the Mac by Scott Knaster, Waqar Malik,
and Mark Dalrymple (Apress, 2012) and in
the document called Introduction to the Objective-C
Programming Language, available from Apple's Developer web
site at
http://developer.apple.com/library/ios/#documentation/
Cocoa/Conceptual/ProgrammingWithObjectiveC.
Actions
In a nutshell, actions are methods that are declared with a
special return type, IBAction, which tells Interface Builder that
this method can be triggered by a control in a
nib file. The declaration for an action method will usually look
like this:
- (IBAction)doSomething:(id)sender;
It might also look like this:
- (IBAction)doSomething;
The actual name of the method can be anything you want, but it
must have a return type of IBAction, which is the same as
declaring a return type of void. A void return
type is how you specify that a method does not return a value.
Also, the method must either take no arguments or take a single
argument, usually called sender. When
the action method is called, sender will contain a pointer to the
object that called it. For example, if this action method was
triggered when the user tapped a button,
sender would point to the button that was tapped. The sender
argument exists so that you can respond to multiple controls
using a single action method. It gives you a
way to identify which control called the action method.
32. Tip There's actually a third, less frequently used type of
IBAction declaration that looks like this:
- (IBAction)doSomething:(id)sender
forEvent:(UIEvent *)event;
We'll begin talking about control events in the next chapter.
It won't hurt anything if you declare an action method with a
sender argument and then ignore it. You will likely see a lot of
code that does just that. Action methods in
Cocoa and NeXTSTEP needed to accept sender whether they
used it or not, so a lot of iOS code, especially early iOS code,
was written that way.
Now that you understand what actions and outlets are, you'll see
how they work as we design our user interface. Before we start
doing that, however, we have one quick
piece of housekeeping to do to keep everything neat and
orderly.
Cleaning Up the View Controller
Single-click BIDViewController.m in the project navigator to
open the implementation file. As you can see, there's a small
amount of boilerplate code in the form of
viewDidLoad and didReceiveMemoryWarning methods that
were provided for us by the project template we chose. These
methods are commonly used in
UIViewController subclasses, so Xcode gave us stub
implementations of them. If we need to use them, we can just
add our code there. However, we don't need any of
these stub implementations for this project, so all they're doing
is taking up space and making our code harder to read. We're
going to do our future selves a favor and
clear away methods that we don't need, so go ahead and delete
33. those methods.
At the top of the file, you'll also see an empty class extension
ready for us to use. A class extension is a special kind of
Objective-C category declaration that lets you
declare methods and properties that will only be usable within a
class's primary implementation block, within the same file.
We'll use class extensions later in the book but
not here, so delete the empty @implementation…@end pair as
well. When you're finished, your implementation should look
like this:
#import "BIDViewController.h"
@implementation BIDViewController
@end
That's much simpler, huh? Don't worry about those methods you
just deleted. You'll be introduced to most of them throughout
the course of the book.
Designing the User Interface
Make sure you save the changes you just made, and then single-
click Main.storyboard to open your application's view in
Xcode's Interface Builder (see Figure 3-4). As
you'll remember from the previous chapter, the white window
that shows up in the editor represents your application's one and
only view. If you look back at Figure 3-1,
you can see that we need to add two buttons and a label to this
view.
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
34. System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 5 of 16
Figure 3-4: Main.storyboard open for editing in Xcode's
Interface Builder
Let's take a second to think about our application. We're going
to add two buttons and a label to our user interface, and that
process is very similar to what we did in the
previous chapter. However, we're also going to need outlets and
actions to make our application interactive.
The buttons will need to each trigger an action method on our
controller. We could choose to make each button call a different
action method; but since they're going to
do essentially the same task (update the label's text), we will
need to call the same action method. We'll differentiate between
the two buttons using that sender argument
we discussed earlier in the section on actions. In addition to the
action method, we'll also need an outlet connected to the label,
so that we can change the text that the
label displays.
Let's add the buttons first and then place the label. We'll create
the corresponding actions and outlets as we design our
interface. We could also manually declare our
actions and outlets and then connect our user interface items to
them, but why do extra work when Xcode will do it for us?
Adding the Buttons and Action Method
Our first order of business is to add two buttons to our user
interface. We'll then have Xcode create an empty action method
35. for us, and we can connect both buttons to
that action method. This will cause the buttons, when tapped by
the user, to call that action method. Any code we place in that
action method will be executed when the
user taps the button.
Select View Utilities Show Object Library or press to open
the object library. Type UIButton into the object library's search
box (you actually need to
type only the first four characters, UIBu, to narrow down the
list). Once you're finished typing, only one item should appear
in the object library: Button (see Figure 3-5).
Figure 3-5: The Button as it appears in the object library
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 6 of 16
Drag Button from the library and drop it on the white window
inside the editing area. This will add a button to your
application's view. Place the button along the left side
of the view the appropriate distance from the left edge by using
the blue guidelines that appear to place it. For vertical
placement, use the blue guidelines to place the
button halfway down in the view. You can use Figure 3-1 as a
placement guide, if that helps.
Note The little, blue guidelines that appear as you move objects
around in Interface Builder are there to help you stick to the
36. iOS Human Interface Guidelines (usually referred to as the
HIG). Apple
provides the HIG for people designing iPhone and iPad
applications. The HIG tells you how you should—and
shouldn't—design your user interface. You really should read it
because it
contains valuable information that every iOS developer needs to
know. You'll find it at
http://developer.apple.com/library/ios/documentation/
UserExperience/Conceptual/MobileHIG/.
Double-click the newly added button. This will allow you to
edit the button's title. Give this button a title of Left.
Now, it's time for some Xcode magic. Select View Assistant
Editor Show Assistant Editor, or press to open the assistant
editor. You can also show and
hide the assistant editor by clicking the middle editor button in
the collection of seven buttons on the upper-right side of the
project window (see Figure 3-6).
Figure 3-6: The Show the Assistant editor toggle button
Unless you specifically request otherwise (see the options in the
Assistant Editor menu), the assistant editor will appear to the
right of the editing pane. The left side will
continue to show Interface Builder, but the right will display
either BIDViewController.h or BIDViewController.m, which are
the header and implementation files for the
view controller that "owns" the view you're looking at.
Tip After opening the assistant editor, you may need to resize
your window to have enough room to work. If you're on a
smaller screen, like the one on a MacBook Air, you might need
to close the
37. utility view and/or project navigator to give yourself enough
room to use the assistant editor effectively. You can do this
easily using the three view buttons in the upper right of the
project window
(see Figure 3-6).
Remember the View Controller icon we discussed in the
previous chapter? This is the same thing all over again. Xcode
knows that our view controller class is
responsible for displaying this view, and so the assistant editor
knows to show us the header and/or implementation of the view
controller class, which are the most likely
places we'll want to create to connect actions and outlets.
As you saw earlier, there's really not much in the
BIDViewController class. It's just an empty UIViewController
subclass. But it won't be an empty subclass for long!
We're now going to ask Xcode to automatically create a new
action method for us and associate that action with the button
we just created. We're going to add these
definitions to the header file. If that's not currently shown in the
assistant view, use the jump bar above it to select
BIDViewController.h.
To do this, begin by clicking your new button so it is selected.
Now, hold down the control key on your keyboard, and then
click-and-drag from the button over to the
source code in the assistant editor. You should see a blue line
running from the button to your cursor (see Figure 3-7). This
blue line is how we connect objects in IB to
code or other objects.
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
38. System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 7 of 16
Figure 3-7: Control-dragging to source code will give you the
option to create an outlet, action, or outlet collection
Tip You can drag that blue line to anything you want to connect
to your button: to the header file in the assistant editor, to the
File's Owner icon, to any of the other icons on the left side of
the editing
pane, or even to other objects in the editing area.
If you move your cursor so it's between the @interface and
@end keywords (see Figure 3-7), a gray box will appear, letting
you know that releasing the mouse button will
insert an outlet, an action, or an outlet collection for you.
Note We use actions and outlets in this book, but we do not use
outlet collections. Outlet collections allow you to connect
multiple objects of the same kind to a single NSArray property,
rather than
creating a separate property for each object.
To finish this connection, release your mouse button, and a
floating pop-up will appear, like the one shown in Figure 3-8.
This window lets you customize your new
action. In the window, click the pop-up menu labeled
Connection and change the selection from Outlet to Action. This
tells Xcode that we want to create an action
instead of an outlet.
39. Figure 3-8: The floating pop-up that appears after you control-
drag to source code
The pop-up will change to look like Figure 3-9. In the Name
field, type buttonPressed. When you're finished, do not hit the
Return key. Pressing Return would finalize
our outlet, and we're not quite ready to do that. Instead, press
the Tab key to move to the Type field and type in UIButton,
replacing the default value of id.
Beginning iOS 7 Development: Exploring the iOS SDK
Reprinted for ZU7S5/5738005, American Public University
System Apress, Jack Nutting, Fredrik Olsson, David Mark, and
Jeff LaMarche (c) 2014, Copying Prohibited
Page 8 of 16
Figure 3-9: Changing the connection type to Action changes the
appearance of the pop-up
Note As you probably remember, an id is a generic pointer that
can point to any Objective-C object. We could leave this as id,
and it would work fine; but if we change it to the class we
expect to
call the method, the compiler can warn us if we try to do this
from the wrong type of object. There are times when you'll want
the flexibility to be able to call the same action method from
different types of controls; and in those cases, you would want
to leave this set to id. In our case, we're only going to call this
method from buttons, so we're letting Xcode and LLVM know
that.
Now, it can warn us if we unintentionally try to connect
something else to it.
40. There are two fields below Type, which we will leave at their
default values. The Event field lets you specify when the
method is called. The default value of Touch Up
Inside fires when the user lifts a finger off the screen if—and
only if—the finger is still on the button. This is the standard
event to use for buttons. This gives the user a
chance to reconsider. If the user moves a finger off the button
before lifting it off the screen, the method won't fire.
The Arguments field lets you choose between the three different
method signatures that can be used for action methods. We want
the sender argument, so that we can
tell which button called the method. That's the default, so we
just leave it as is.
Hit the Return key or click the Connect button, and Xcode will
insert the action method for you. Your BIDViewController.h
file should now look like this:
#import <UIKit/UIKit.h>
@interface BIDViewController : UIViewController
- (IBAction)buttonPressed:(UIButton *)sender;
@end
Xcode has now added a method declaration to your class's
header file for you. Use the jump bar above the assistant editor
to switch over to BIDViewController.m, and
you'll see that it has also added a method stub for you.
- (IBAction)buttonPressed:(UIButton *)sender {
}
In a few moments, we'll come back here to write the code that
41. needs to run when the user taps either button. In addition to
creating the method declaration and
implementation, Xcode has also connected that button to this
action method and stored that information in the storyboard.
That means we don't need to do anything else
to make that button call this method when our application runs.
Go back to Main.storyboard and drag out another button, this
time placing the button on the right side of the screen. After
placing it, double-click it and change its name
to Right. The blue lines will pop up to help you align it with the
right margin, as you saw before, and they will also help you
align the button vertically with the other
button.
Tip Instead of dragging a new object out from the library, you
could hold down the inline key (the Option key) and drag the
original object (the Left button in this example) over. Holding
down the
key tells Interface Builder to drag out a copy of the original
object.
This time, we don't want to create a new action method. Instead,
we want to connect …
Dick’s Sporting Goods
Manami Maehama
Professor Martin
Horizontal & Vertical Analysis
Balance Sheet
42. Cash & Short Term Investments
Cash and Short Term investments is the sum of two balance
sheet line items: cash
and equivalents and short term investments in marketable
securities.
3 ways to improve:
1. Lease, Don’t Buy.
2. Offer Discounts on Loans
3. Conduct Customer Credit Checks
Assets Horizontal
2016 2017 2018 2019 2020 2021
119M (39%) 165M (-39%) 101M (13%) 114M (-39%) 70M (-
6.5%) 69M
Total Accounts Receivable
Total Accounts receivable is the balance of money due to a firm
for goods or
services delivered or used but not yet paid for by customers.
3 ways to improve :
1. Move fast on past-due receivables.
2. Consider offering an early payment discount
3. Consider offering a payment plan
ASSET Horizontal
2016 2017 2018 2019 2020 2021
43. 67M (16%) 78M (-17%) 65M (-32%) 44M (34%) 59M (0.25%)
59M
Inventories
Inventory is the term for the goods available for sale and raw
materials used to
produce goods available for sale.
3 ways to improve :
1. Avoid dead stock.
2. Save on storage costs
3. Regular auditing
ASSET Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B
Total Current Assets
Total current assets represent all the assets of a company that
are expected to be conveniently
sold, consumed, utilized or exhausted through the standard
business operations, which can lead to
their conversion to a cash value over the next one year period.
3 ways to improve :
1. Pay off Current Liabilities.
2. Sell-off Unproductive Assets.
3. Improve Current Asset by Rising Shareholders Funds
44. ASSET Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B (0%) 2B
Net Property, Plant & Equipment
Net Property, Plant, and Equipment is the value of all buildings,
land, furniture, and
other physical capital that a business has purchased to run its
business.
3 ways to improve :
1. Ins and outs of depreciation
2. Use an accelerated method that takes most most of the
depreciation up front
3. Subtract depreciation over time
ASSET Horizontal
2016 2017 2018 2019 2020 2021
1B (100%) 2B (0%) 2B (0%) 2B (100%) 4B (50%) 5B
Intangible Assets
An intangible asset is an asset that is not physical in nature.
3 ways to improve:
1. Identify Your Intangible Asset
45. 2. Standardize Systems and Processes
3. Develop Your Intangibles
ASSET Horizontal
2016 2017 2018 2019 2020 2021
310M (24%) 385M (0.5%) 387M (-2%) 380M (-10%) 340M
(3%) 340M
Net Goodwill
Goodwill is an intangible asset that is associated with the
purchase of one
company by another.
3 ways to improve:
1. Cash-Flow Statement Basics
2. Investing Cash Flow
3. Financing Cash Flow
ASSET Horizontal
2016 2017 2018 2019 2020 2021
200M (23%) 245M (2%) 250M (0%) 250M (-2%) 245M (6%)
245M
Other Assets
Other assets are a grouping of accounts that are listed as a
separate line item in
the assets section of the balance sheet.
46. 3 ways to improve:
1. Find new sources of income
2. Get out of debt
3. Spend less
ASSET Horizontal
2016 2017 2018 2019 2020 2021
83M (30%) 108M (11%) 120M (-12%) 106M (26%) 134M
(14%) 152M
Tangible Other Assets
Tangible assets include both fixed assets, such as machinery,
buildings and land, and
current assets, such as inventory.
3 ways to improve:
1. A high net tangible assets value can serve as a cushion
against uncertainty that can
take place in the market and help to support a company’s stock
price.
2. Determining this value helps to find out if the market share
price of a company is
overvalued or undervalued.
3. As tangible current assets can easily be converted into cash,
they provide liquidity to
the business and, thus, reduce risk
47. ASSET Horizontal
2016 2017 2018 2019 2020 2021
83M (30%) 108M (11%) 120M (-12%) 106M (26%) 134M
(14%) 152M
Total Assets
Total assets refers to the total amount of assets owned by a
person or entity.
3 ways to improve:
1. Reduce asset base
2. Improve Productivity And Lower Costs
3. Increase Sales Revenue
ASSET Horizontal
2016 2017 2018 2019 2020 2021
4B (0%) 4B(0%) 4B(0%) 4B(75%) 7B(19%) 8B
Total Accounts Receivable & Inventories
ASSET Vertical
2016 2017 2018 2019 2020 2021
67M (2%) 78M (2%) 65M (2%) 44M (1%) 59M (1%) 2%
Total Assets
52. ST Debt & Current Portion LT Debt
The current portion of long-term debt is the amount of principal
that will be due within one year of
the date of the balance sheet. This amount is reported on the
balance sheet as one of the
company's current liabilities.
3 ways to improve:
1. A company can keep its long-term debt from ever being
classified as a current liability by
periodically rolling forward the debt into instruments with
longer maturity dates and balloon
payments.
2. Pay debts back on time
3. Stop creating more debt
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
589,000
(10%)
646,000
(67%)
5M (0%) 5M (83%) 423M (40%) 592M
Accounts Payable
Money owed by a company to its creditors.
3 ways to improve:
53. 1. Go paperless when possible
2. Look for discounts
3. Standardize your accounts payable workflow process
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
678M (12%) 756M (12%) 843M (6%) 890M (12%) 1B (11%)
110M
Income Tax Payable
Income tax payable is a type of account in the current liabilities
section of a
company's balance sheet. It is compiled of taxes due to the
government within one
year.
3 ways to improve:
1. Open an interest-bearing bank account
2. Skip some of the credits for which you are eligible
3. Accelerate advanced payments in the current year instead of
delaying
payment until the next tax year.
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
68M (26%) 86M (-60%) 34M (15%) 39M (-74%) 10M (-93%)
700,000
54. Other Current Liabilities
Other Current Liabilities are categories of short-term debt that
are lumped together
on the balance sheet.
3 ways to improve: to reduce
1. Sell unnecessary assets
2. Factor invoices
3. Use investments or cash to pay off loans
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
445M (25%) 555M (-2%) 543M (5%) 570M (13%) 641M (10%)
705M
Miscellaneous Current Liabilities
Miscellaneous Current Liabilities is an account for current
liabilities that do not fall
into any of the categories already defined.
3 ways to improve: to reduce
1. Reduce costs
2. Increase income
3. Restructure liabilities
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
55. 350M (19%) 418M
(-0.2%)
417M (-3%) 405M (58%) 641M (18%) 756M
Total Current Liabilities
Total Current Liabilities are the claims to the company's assets
that are due within
one year or the cycle of operations.
3 ways to improve:
1. Restructure assets
2. Raise more capital
3. Exit the business
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
1B (0%) 1B (0%) 1B (100%) 2B (0%) 2B (25%) 2.5B
Long Term Debt
Long Term Debt is any amount of outstanding debt a company
holds that has a
maturity of 12 months or longer.
3 ways to improve: to reduce
1. Increase profitable sales
2. Sell assets and lease them back
56. 3. Bring in an investor
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
5M(0%) 5M (1100%) 60M (-8%) 55M
(5355%)
3B (1612%) 51B
Deferred Taxes-Debit
Corporate bookkeepers debit an asset account to increase its
value and credit the
account to reduce its worth.
3 ways to improve:
1. Try to stop losses from operations
2. Pay the taxes
3. Use the straight line method
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
6M(667%) 46M (-67%) 14M (-7%) 13M (8%) 14M (150%) 35M
Other Liabilities
Other Liabilities are all miscellaneous obligations that a
company lumps together
on financial statements.
57. 3 ways to improve:
1. Sell unnecessary assets
2. Convert necessary assets into liabilities
3. Factor invoices
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
175M (11%) 195M (9%) 213M (-5%) 203M(-34%) 134M (-5%)
127M
Total Liabilities
Total liabilities are the aggregate debt and financial obligations
owed by a
business to individuals and organizations at any specific period
of time.
3 ways to improve:
1. Rework your business budget
2. Reduce business expenses
3. Increase customer sales
Liabilities Horizontal
2016 2017 2018 2019 2020 2021
2B (0%) 2B (-0%) 2B(0%) 2B(150%) 5B(38%) 7B
58. ST Debt & Current Portion LT Debt & Accounts Payable
Liabilities Vertical
2016 2017 2018 2019 2020 2021
589,000
(0.1%)
646,000
(0.1%)
5M (0.3%) 5M (0.3%) 423M (8%) 2%
Total Liabilities
2016 2017 2018 2019 2020
2B 2B 2B 2B 5B
2016 2017 2018 2019 2020 2021
678M (34%) 756M (38%) 843M (42%) 890M (45%) 1B (20%)
36%
ST Debt &
Current Portion
LT Debt
Accounts
Payable
Income Tax Payable & Other Current Liabilities
Liabilities Vertical